基于JS实现移动端向左滑动出现删除按钮功能


Posted in Javascript onFebruary 22, 2017

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

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

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>js侧滑显示删除按钮</title>
<style>
*{margin:0;padding:0;}
body{font-size:.14rem;}
li{list-style:none;}
i{font-style:normal;}
a{color:#393939;text-decoration:none;}
.list{overflow:hidden;margin-top:.2rem;padding-left:.3rem;border-top:1px solid #ddd;}
.list li{overflow:hidden;width:120%;border-bottom:1px solid #ddd;}
.list li a{display:block;height:.88rem;line-height:.88rem;-webkit-transition:all 0.3s linear;transition:all 0.3s linear;}
.list li i{float:right;width:15%;text-align:center;background:#E2421B;color:#fff;}
.swipeleft{transform:translateX(-15%);-webkit-transform:translateX(-15%);}
</style>
<script>
//计算根节点HTML的字体大小
function resizeRoot(){
 var deviceWidth = document.documentElement.clientWidth,
  num = 750,
  num1 = num / 100;
 if(deviceWidth > num){
  deviceWidth = num; 
 }
 document.documentElement.style.fontSize = deviceWidth / num1 + "px";
}
//根节点HTML的字体大小初始化
resizeRoot();

window.onresize = function(){
 resizeRoot();
};
</script>
</head>
<body>
<section>
<div class="list">
 <ul>
  <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >侧滑显示删除按钮1<i>删除</i></a></li>
  <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >侧滑显示删除按钮2<i>删除</i></a></li>
  <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >侧滑显示删除按钮3<i>删除</i></a></li>
 </ul>
</div>
<script>
//侧滑显示删除按钮
var expansion = null; //是否存在展开的list
var container = document.querySelectorAll('.list li a');
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 ;
  if(expansion){ //判断是否展开,如果展开则收起
   expansion.className = "";
  }  
 });
 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();
    this.className = "swipeleft"; //左滑展开
    expansion = this;
   }
   swipeY = false;
  }
  // 上下滑动
  if(swipeY && Math.abs(X - x) - Math.abs(Y - y) < 0) {
   swipeX = false;
  }  
 });
}
</script>
</body>
</html>

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

移动端自适应js

<script>
//计算根节点HTML的字体大小
function resizeRoot(){
 var deviceWidth = document.documentElement.clientWidth,
  num = 750,
  num1 = num / 100;
 if(deviceWidth > num){
  deviceWidth = num; 
 }
 document.documentElement.style.fontSize = deviceWidth / num1 + "px";
}
//根节点HTML的字体大小初始化
resizeRoot();

window.onresize = function(){
 resizeRoot();
};
</script>

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

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

效果图如下:

基于JS实现移动端向左滑动出现删除按钮功能

附下源码下载:

以上所述是小编给大家介绍的基于JS实现移动端向左滑动出现删除按钮功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JSON为什么那样红为什么要用json(另有洞天)
Dec 26 Javascript
通过location.replace禁止浏览器后退防止重复提交
Sep 04 Javascript
JavaScript插件化开发教程 (四)
Jan 27 Javascript
JQuery的ON()方法支持的所有事件罗列
Feb 28 Javascript
jQuery随机密码生成的方法
Mar 09 Javascript
js操作css属性实现div层展开关闭效果的方法
May 11 Javascript
js实现简单秒表走动的时钟特效
Mar 25 Javascript
jquery验证手机号是否正确实例讲解
Nov 17 Javascript
javascript求日期差的方法
Mar 02 Javascript
JavaScript创建对象的七种方式全面总结
Aug 21 Javascript
js中的数组对象排序分析
Dec 11 Javascript
微信小程序点击列表跳转到对应详情页过程解析
Sep 26 Javascript
高效的jQuery代码编写技巧总结
Feb 22 #Javascript
JS拉起或下载app的实现代码
Feb 22 #Javascript
js实现带简单弹性运动的导航条
Feb 22 #Javascript
bootstrap fileinput 插件使用项目总结(经验)
Feb 22 #Javascript
javascript 网页进度条简单实例
Feb 22 #Javascript
详解闭包解决jQuery中AJAX的外部变量问题
Feb 22 #Javascript
js实现PC端根据IP定位当前城市地理位置
Feb 22 #Javascript
You might like
Ajax PHP简单入门教程代码
2008/04/25 PHP
使用PHP获取网络文件的实现代码
2010/01/01 PHP
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
Three.js的使用及绘制基础3D图形详解
2017/04/27 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
Python正则表达式匹配HTML页面编码
2015/04/08 Python
python中私有函数调用方法解密
2016/04/29 Python
Python random模块用法解析及简单示例
2017/12/18 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
关于Python作用域自学总结
2019/06/10 Python
python 操作hive pyhs2方式
2019/12/21 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
司机岗位职责
2013/11/15 职场文书
记帐员岗位责任制
2014/02/08 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
学雷锋感言
2015/08/03 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python