基于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 相关文章推荐
jQuery使用一个按钮控制图片的伸缩实现思路
Apr 19 Javascript
jquery的map与get方法详解
Nov 04 Javascript
window.open打开页面居中显示的示例代码
Dec 27 Javascript
介绍JavaScript的一个微型模版
Jun 24 Javascript
编写高性能Javascript代码的N条建议
Oct 12 Javascript
JavaScript必看小技巧(必看)
Jun 07 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
Apr 04 Javascript
JS点击动态添加标签、删除指定标签的代码
Apr 18 Javascript
基于Node.js搭建hexo博客过程详解
Jun 25 Javascript
ES6 Generator函数的应用实例分析
Jun 26 Javascript
JS实现容器模块左右拖动效果
Jan 14 Javascript
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
高效的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
mysql建立外键
2006/11/25 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
js或css实现滚动广告的几种方案
2010/01/28 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
使用jquery的ajax需要注意的地方dataType的设置
2013/08/12 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
d3绘制基本的柱形图的实现代码
2018/12/12 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
JS精确判断数据类型代码实例
2019/12/18 Javascript
Python标准库与第三方库详解
2014/07/22 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
python递归函数用法详解
2020/10/26 Python
Django解决frame拒绝问题的方法
2020/12/18 Python
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
方正Java笔试题
2014/07/03 面试题
机工车间主任岗位职责
2014/03/05 职场文书
纪检监察建议书
2014/05/19 职场文书
房屋产权证明书
2014/10/15 职场文书
授权委托书
2015/01/28 职场文书
明星邀请函
2015/02/02 职场文书
教师病假条范文
2015/08/17 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js