基于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 SHA-1:Secure Hash Algorithm
Dec 20 Javascript
在UpdatePanel内jquery easyui效果失效的解决方法
Apr 11 Javascript
Javascript脚本实现静态网页加密实例代码
Nov 05 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
Dec 04 Javascript
jquery改变tr背景色的示例代码
Dec 28 Javascript
Javascript中对象继承的实现小例
May 12 Javascript
javascript实现树形菜单的方法
Jul 17 Javascript
基于Bootstrap重置输入框内容按钮插件
May 12 Javascript
微信小程序之拖拽排序(代码分享)
Jan 21 Javascript
react-router JS 控制路由跳转实例
Jun 15 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
Jul 18 Javascript
JavaScript模拟实现封装的三种方式及写法区别
Oct 27 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
第八节--访问方式
2006/11/16 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
永不消失的title提示代码
2007/02/15 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
2017/02/23 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
python中lambda与def用法对比实例分析
2015/04/30 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
python实现程序重启和系统重启方式
2020/04/16 Python
python time.strptime格式化实例详解
2021/02/03 Python
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
linux面试相关问题
2012/08/11 面试题
三查三看党性分析材料
2014/02/18 职场文书
电子装配专业毕业生求职信
2014/04/23 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
使用python求解迷宫问题的三种实现方法
2022/03/17 Python