基于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 prototype,executing,context,closure
Dec 24 Javascript
javascript实现博客园页面右下角返回顶部按钮
Feb 22 Javascript
基于insertBefore制作简单的循环插空效果
Sep 21 Javascript
Bootstrap每天必学之按钮
Nov 26 Javascript
基于JavaScript实现焦点图轮播效果
Mar 27 Javascript
浅谈Webpack 是如何加载模块的
May 24 Javascript
详解angular如何调用HTML字符串的方法
Jun 30 Javascript
js+SVG实现动态时钟效果
Jul 14 Javascript
QRCode.js二维码生成并能长按识别
Oct 16 Javascript
vue中使用mxgraph的方法实例代码详解
May 17 Javascript
webpack 动态批量加载文件的实现方法
Mar 19 Javascript
vue实现从外部修改组件内部的变量的值
Jul 30 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
round robin权重轮循算法php实现代码
2016/05/28 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
前端 Vue.js 和 MVVM 详细介绍
2016/12/29 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
用Python编写简单的定时器的方法
2015/05/02 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
python中的colorlog库使用详解
2019/07/05 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
基于matplotlib xticks用法详解
2020/04/16 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
《在大海中永生》教学反思
2014/02/24 职场文书
政风行风评议心得体会
2014/10/21 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android
Python如何使用循环结构和分支结构
2022/04/13 Python
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL