js移动端向左滑动出现删除按钮

Posted 最骚的就是你

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js移动端向左滑动出现删除按钮相关的知识,希望对你有一定的参考价值。

最近在做移动端项目时,需要实现一个列表页面的每一项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="#">侧滑显示删除按钮1<i>删除</i></a></li>
        <li><a href="#">侧滑显示删除按钮2<i>删除</i></a></li>
        <li><a href="#">侧滑显示删除按钮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移动端向左滑动出现删除按钮的主要内容,如果未能解决你的问题,请参考以下文章

用ionic做的列表向左滑动,出现删除等功能按钮

我的应用程序使用片段,但我需要从左到右从右向左滑动

UITableViewCell 覆盖向左滑动的删除按钮

如何向列表添加编辑按钮,就像在向左滑动列表项时删除按钮一样

向左滑动时未剪切子视图以删除 UITableViewCell

滑动以删除行,而无需点击删除按钮