基于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 相关文章推荐
javascript IE中的DOM ready应用技巧
Jul 23 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
Aug 10 Javascript
javascript 循环调用示例介绍
Nov 20 Javascript
探讨javascript是不是面向对象的语言
Nov 21 Javascript
浅析JavaScript中的同名标识符优先级
Dec 06 Javascript
JavaScript中的数组特性介绍
Dec 30 Javascript
javascript禁止访客复制网页内容的实现代码
Aug 05 Javascript
JS实现的另类手风琴效果网页内容切换代码
Sep 08 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
Sep 05 jQuery
vue实现跳转接口push 转场动画示例
Nov 01 Javascript
微信小程序实现上传多个文件 超过10个
Mar 30 Javascript
javascript的hashCode函数实现代码小结
Aug 11 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
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
php实现粘贴截图并完成上传功能
2015/05/17 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
微信小程序的部署方法步骤
2018/09/04 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
python中精确输出JSON浮点数的方法
2014/04/18 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
python对日志进行处理的实例代码
2018/10/06 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
大学四年学习的自我评价分享
2013/12/09 职场文书
《猫》教学反思
2014/02/26 职场文书
遗产继承公证书
2014/04/09 职场文书
高一新生军训方案
2014/05/12 职场文书
安全责任书范文
2014/08/25 职场文书
党委书记个人检查对照材料思想汇报
2014/10/11 职场文书
综治目标管理责任书
2015/05/11 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书