基于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 相关文章推荐
newxtree.js代码
Mar 13 Javascript
JS 创建对象(常见的几种方法)
Nov 03 Javascript
js判断背景图片是否加载成功使用img的width实现
May 29 Javascript
jquery对单选框,多选框,文本框等常见操作小结
Jan 08 Javascript
js如何判断用户是否是用微信浏览器
Jun 05 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
Sep 01 Javascript
图文详解JavaScript的原型对象及原型链
Aug 02 Javascript
JavaScript 深层克隆对象详解及实例
Nov 03 Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 Javascript
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
详解vue中localStorage的使用方法
Nov 22 Javascript
vue路由传参页面刷新参数丢失问题解决方案
Oct 08 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的FTP学习(一)[转自奥索]
2006/10/09 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
pandas 对group进行聚合的例子
2019/12/27 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
Python 文件数据读写的具体实现
2020/01/24 Python
Django REST framwork的权限验证实例
2020/04/02 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
厂区绿化方案
2014/05/08 职场文书
开工典礼策划方案
2014/05/23 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
采购员岗位职责范本
2015/04/07 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
运动会通讯稿50字
2015/07/20 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL