基于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自定义等待wait函数实例分析
Mar 23 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
Mar 24 Javascript
使用Raygun来自动追踪AngularJS中的异常
Jun 23 Javascript
jquery+json实现数据二级联动的方法
Nov 28 Javascript
Node.js中常规的文件操作总结
Oct 13 Javascript
vue2.0构建单页应用最佳实战
Apr 01 Javascript
详解使用React进行组件库开发
Feb 06 Javascript
解决vue 单文件组件中样式加载问题
Apr 24 Javascript
微信提示 在浏览器打开 效果实现过程解析
Sep 10 Javascript
js实现上传图片并显示图片名称
Dec 18 Javascript
JS操作JSON常用方法(10w阅读)
Dec 06 Javascript
JavaScript前端面试组合函数
Jun 21 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
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
在JS数组特定索引处指定位置插入元素的技巧
2014/08/24 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
快速查询Python文档方法分享
2017/12/27 Python
python中join()方法介绍
2018/10/11 Python
解决python中无法自动补全代码的问题
2018/12/04 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
超实用的 30 段 Python 案例
2019/10/10 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
python打包生成so文件的实现
2020/10/30 Python
python matlab库简单用法讲解
2020/12/31 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
校园报刊亭的创业计划书
2014/01/02 职场文书
三年级学生评语大全
2014/12/26 职场文书
小石潭记导游词
2015/02/03 职场文书
疾病证明书
2015/06/19 职场文书
《蟋蟀的住宅》教学反思
2016/02/17 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
python之json文件转xml文件案例讲解
2021/08/07 Python