博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js移动端向左滑动出现删除按钮
阅读量:6545 次
发布时间:2019-06-24

本文共 2479 字,大约阅读时间需要 8 分钟。

最近在做移动端项目时,需要实现一个列表页面的每一项item向左滑动时出现相应的删除按钮,本来想着直接使用zepto的touch.js插件,因为之前实现相同的功能时用过这个插件,当时还挺好用的,直接使用它的swipeLeft和swipeRight方法即可,可是今天又开始做这个功能时,却发现这两个方法在使用时毫无效果,一点反应都没有。上网查资料,又下载了最新版本的zepto和touch.js,都没有用,也不知为什么?所以就弃用了这个插件。

下面是我后来实现后的代码,其实就是用了原生js的touch事件,再结合触摸点的坐标来判断左滑和右滑,

js侧滑显示删除按钮

上边的js实现代码主要是参考了手机QQ的做法,在出现删除按钮后,只要点击了列表中的任何一个,就会自动收起删除按钮,同样的在点击了删除按钮后也会立马收起。可能有些同学觉得这样不太好,希望在点击删除按钮时不立马收起,在右滑时再将删除按钮收起,这样也是可以的,根据自己的爱好或实际需求来做都可以,以下贴出一个前端同行给出的解决方案(大部分代码都一样,只是删除了在touchstart时的一个判断是否收起的if语句,同时在判断左滑的if判断中加入了是否收起的代码):

//侧滑显示删除按钮var container = document.querySelectorAll('.list li p');for(var i = 0; i < container.length; i++){        var x, y, X, Y, swipeX, swipeY;    container[i].addEventListener('touchstart', function(event) {        x = event.changedTouches[0].pageX;        y = event.changedTouches[0].pageY;        swipeX = true;        swipeY = true ;          });    container[i].addEventListener('touchmove', function(event){             X = event.changedTouches[0].pageX;        Y = event.changedTouches[0].pageY;                // 左右滑动        if(swipeX && Math.abs(X - x) - Math.abs(Y - y) > 0){            // 阻止事件冒泡            event.stopPropagation();             if(X - x > 10){   //右滑                event.preventDefault();                this.className = "";    //右滑收起            }            if(x - X > 10){   //左滑                event.preventDefault();                                var swipeLeft = document.getElementsByClassName("swipeleft");                for(var j = 0; j < swipeLeft.length; j++){                    swipeLeft[j].className = "";                }                this.className = "swipeleft";   //左滑展开            }            swipeY = false;        }        // 上下滑动        if(swipeY && Math.abs(X - x) - Math.abs(Y - y) < 0) {            swipeX = false;        }            });}var i = document.querySelectorAll('.list li i');i.forEach(function(item, index){    i[index].onclick = function(){        this.parentNode.parentNode.remove();    };});

也许大家也注意到了,在页面最开始部分加入了原生js对移动端自适应的实现,主要为了方便移动端页面在不同尺寸屏幕上的更好的展现,也是为了在误差很小的情况下能更好的将设计稿近乎完美的呈现在不同尺寸的屏幕上,主要使用到的单位是rem。

移动端自适应js

原理其实很简单,就是根据不同屏幕来计算根节点html的font-size,再利用rem相对于根节点html的font-size来计算的原理来实现不同元素的大小、间距等。

也有人说其实不用这样的js来判断,直接用css3的响应式@media screen也可以,其实我认为在各种尺寸的安卓屏幕如此活跃的当下,@media screen处理起来就显得有些力不从心了。

效果图如下:

688074-20170222165316179-871222281.jpg

以下附上源代码:

转载于:https://www.cnblogs.com/tnnyang/p/6429730.html

你可能感兴趣的文章
神奇的代码-常见错误代码注意点
查看>>
[直播一揽子]编码构思和套路
查看>>
[直播一揽子]x264参数的解释
查看>>
iOS学习之Objective-C 2.0 运行时系统编程
查看>>
Exchange2007-Exchange2010升级-06 数据库高可用组的创建
查看>>
phpHiveAdmin是如何通过Hive/Hadoop工作的
查看>>
双向链表内结点的删除(4)
查看>>
项目总结
查看>>
JSON字符串转成对象
查看>>
SaltStack 中ZMQ升级
查看>>
exchange 2013 提示“HTTP 500内部服务器错误”
查看>>
Linux运维学习笔记之一:运维的原则和学习方法
查看>>
怎样使用原型设计中的组件样式功能
查看>>
python threading
查看>>
谷安天下2013年6月CISA考前辅导 第一季
查看>>
ARM程序规范
查看>>
我的友情链接
查看>>
Qt下的OpenGL 编程(8)文字、FPS、动画
查看>>
Android开发入门系列
查看>>
文件删除封装,懒得以后再写了
查看>>