JS模拟左滑删除

接触前端有半年的时间了,不会的都会去搜索别人的代码,这是本人第一篇博客,也是因为在搜索了很多关于左滑删除的例子,但是结果并不是很好,虽然样式上面实现了,但是大多数都会有无法点击删除或是无法控制事件的困扰,所以简单整理一种写法,菜鸟一只,只求不喷~

先简单说一下思路,在一个container容器里面,定义两个平级的标签   【显示内容+删除按钮】,,按钮绝对定位在右侧,z-index 在后方,需要固定宽度,当滑动显示内容的部分,按钮显示出来。通过 active 的添加和删除实现,下面是代码部分:

首先,HTML部分,很简单,一个简单的内容,一个delete按键

<body><ul data-role="listview" class="swipe-delete">    <li>        <div class="behind" data-touch="true">左滑删除</div>        <span>Delete</span>    </li>
   <li>        <div class="behind" data-touch="true">左滑删除</div>        <span>Delete</span>    </li>
</ul></body>

加上简单的CSS样式(微丑)

<style>    *{        margin:0;        padding:0;        list-style: none;    }    .swipe-delete{        margin:0 auto;    }    li{        position: relative;        border-bottom:1px solid red;    }    .behind {        position:relative;        width: 100%;        height: 60px;        line-height: 60px;        z-index: 10;        background: #ffffff;

transition: all 0.3s ease;        -webkit-transition: all 0.30s ease;    }    .active{        transform: translate(-60px,0) translateZ(0);        -webkit-transform: translate(-60px,0) translateZ(0);    }    span{        position: absolute;        right:0;        bottom:0;        top:0;        width:60px;        color:#ffffff;        text-align: center;        background: red;        font-size: 20px;        line-height: 60px;        z-index: 1;    }</style>

效果如下:

js来喽~  【注】需要引入zepto.js

<script src="zepto.js"></script><script type="text/javascript">    $(function() {

var oBody = $(document.body), X, Y,startX,startY,moveEndX,moveEndY;//第一步:获取触碰的位置坐标        oBody.on("touchstart", "li", function (e) {            startX = e.originalEvent.changedTouches[0].pageX;            startY = e.originalEvent.changedTouches[0].pageY;        });//abs()是取到元素的绝对值,下面是通过判断touch坐标来决定滑动方向
oBody.on("touchmove", "li", function (e) {            e.preventDefault();            moveEndX = e.originalEvent.changedTouches[0].pageX;            moveEndY = e.originalEvent.changedTouches[0].pageY;            X = moveEndX - startX;            Y = moveEndY - startY;            var $touchDoom = $(this).children(".behind");//X轴的绝对值大于Y轴的绝对值并且x<0,是向左滑动            if (Math.abs(X) > Math.abs(Y) && X < 0) {//给每一个默认滑动的元素增加默认属性data-touch ,data-touch == ‘true‘,表示可以滑动
                if($touchDoom.attr("data-touch") == ‘true‘){                    $(this).siblings(‘li‘).find(".behind").attr("data-touch","true").removeClass("active");                    $touchDoom.addClass("active");                    $touchDoom.attr("data-touch","false");                }            }//反之......            else if (Math.abs(X) > Math.abs(Y) && X > 0) {                if($touchDoom.attr("data-touch") == ‘false‘){                    $touchDoom.removeClass("active");                    $touchDoom.attr("data-touch","true");                }            }        });

//点击删除

oBody.on("click", "li span", function () {            var parent = $(this).parent("li");            $(this).parent("li").hide(200,function(){                parent.remove();            });        });    });</script>

附上完整代码,仅供参考
<!DOCTYPE html><html>

<head>    <title>JQM Swipe Delete</title>    <meta name="viewport" content="width=device-width, initial-scale=1">    <meta name="apple-mobile-web-app-capable" content="yes">    <style>        *{            margin:0;            padding:0;            list-style: none;        }        .swipe-delete{            margin:0 auto;        }        li{            position: relative;            border-bottom:1px solid red;        }        .behind {            position:relative;            width: 100%;            height: 60px;            line-height: 60px;            z-index: 10;            background: #ffffff;

transition: all 0.3s ease;            -webkit-transition: all 0.30s ease;        }        .active{            transform: translate(-60px,0) translateZ(0);            -webkit-transform: translate(-60px,0) translateZ(0);        }        span{            position: absolute;            right:0;            bottom:0;            top:0;            width:60px;            color:#ffffff;            text-align: center;            background: red;            font-size: 20px;            line-height: 60px;            z-index: 1;        }    </style></head>

<body><ul data-role="listview" class="swipe-delete">    <li>        <div class="behind" data-touch="true">左滑删除</div>        <span>Delete</span>    </li>    <li>        <div class="behind" data-touch="true">左滑删除</div>        <span>Delete</span>    </li>    <li>        <div class="behind" data-touch="true">左滑删除</div>        <span>Delete</span>    </li><li>    <div class="behind" data-touch="true">左滑删除</div>    <span>Delete</span></li>    <li>        <div class="behind" data-touch="true">左滑删除</div>        <span>Delete</span>    </li>

</ul></body>

<script src="zepto.js"></script><script type="text/javascript">    $(function() {

var oBody = $(document.body), X, Y,startX,startY,moveEndX,moveEndY;

oBody.on("touchstart", "li", function (e) {            startX = e.originalEvent.changedTouches[0].pageX;            startY = e.originalEvent.changedTouches[0].pageY;        });

oBody.on("touchmove", "li", function (e) {            e.preventDefault();            moveEndX = e.originalEvent.changedTouches[0].pageX;            moveEndY = e.originalEvent.changedTouches[0].pageY;            X = moveEndX - startX;            Y = moveEndY - startY;            var $touchDoom = $(this).children(".behind");            if (Math.abs(X) > Math.abs(Y) && X < 0) {                if($touchDoom.attr("data-touch") == ‘true‘){                    $(this).siblings(‘li‘).find(".behind").attr("data-touch","true").removeClass("active");                    $touchDoom.addClass("active");                    $touchDoom.attr("data-touch","false");                }            }            else if (Math.abs(X) > Math.abs(Y) && X > 0) {                if($touchDoom.attr("data-touch") == ‘false‘){                    $touchDoom.removeClass("active");                    $touchDoom.attr("data-touch","true");                }            }        });

oBody.on("click", "li span", function () {            var parent = $(this).parent("li");            $(this).parent("li").hide(200,function(){                parent.remove();            });        });    });</script>

</html>
				
时间: 2024-08-04 03:38:22

JS模拟左滑删除的相关文章

小程序滴滴车主板块的银行卡管理左滑删除编辑

最近在类似于滴滴软件的一款小程序,工程确实有点大,很多东西都是第一次做.这次记录一下关于左滑删除的一个代码记录.主要的思想就是计算滑动距离的大小来使用css中的 transition 控制滑动的效果,主流的都是控制边距margin来达到左滑的效果. 根据我所拿到的ui,我所运用的是使用宽度和radius来达到左滑的效果,造一个属性值,并塞进遍历数组进行判断是true还是false来控制样式. 完成效果: html <view class='content'> <view class='i

qq联系人 左滑删除功能

// 局部刷新 NSArray *indexPaths = @[ [NSIndexPath indexPathForRow:0 inSection:0], [NSIndexPath indexPathForRow:1 inSection:0] ]; [self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft]; #pragma mark - 按钮的点击 - (IBAc

ANDROID仿IOS微信滑动删除_SWIPELISTVIEW左滑删除例子

http://dwtedx.sinaapp.com/itshare_290.html 本例子实现了滑动删除ListView的Itemdemo的效果.大家都知道.这种创意是来源于IOS的.左滑删除的功能.在Android上面实现比较麻烦.本例子中不仅实现了左滑删除功能.还实现了左滑赞.左滑分享.左滑收藏等功能.当然大家也可以根据自己项目的需求来修改功能.QQ和微信也实现了相同的功能.大家可以看看.先上程序运行的效果 怎么样.大家看了这个截图是不是很心动呀.而且在左滑的时候还配有简单的滑动动画呢.非

Android开发学习之路-PopupWindow和仿QQ左滑删除

这周作业,要做一个类似QQ的左滑删除效果的ListView,因为不想给每个item都放一个按钮,所以决定用PopupWindow,这里记录一下 先放一下效果图: 先说明一下这里面的问题: ①没有做到像QQ那样可以允许item跟随手指移动,虽然PopupWindow有update方法让我们动态移动,但是在屏幕外移动会没有动画效果,直接弹进来 ②仔细观察可以发现,item的滑动和删除按钮的滑动是分开的,无法保证它们会一起播放,QQ的动画可以 再说说大概的思路,因为我们没有让item都带上Button

ListView左滑删除&amp;代理模式

要实现类似QQ的ListView左滑删除其实可以给ListView中每个条目外面添加一个可以处理左滑事件的View即可.该控件需要重写onInterceptTouchEvent方法和onTouchEvent方法,具体处理过程参考 安卓事件分发机制,确定由自定义控件处理触摸事件后需要调用requestDisallowInterceptTouchEvent来防止ListView响应事件. 下面介绍如何通过代理来实现. public class SlideListView extends ListVi

微信小程序实现左滑删除源码

左滑删除效果在app的交互方式中十分流行,比如全民应用微信 微信左滑删除 再比如曾引起很大反响的效率app Clear Clear左滑删除 从技术上来说,实现这个效果并不困难,响应一下滑动操作,移动一下组件,再加上些坐标计算,状态记录就可以了.也有一些文章介绍了在小程序上如何实现这一效果,不过我基本可以确定这些开发者没有在真机上详细测试,因为经我实践发现,在小程序上想要完美实现这个效果几乎是不可能完成的任务. 这一切要从小程序的事件机制说起.对于滑动类操作,小程序提供了bind和catch两种响

类似QQ消息左滑删除的Demo

最近在网上学到一篇类似QQ消息左滑删除的demo,完善了下代码,感觉还不错,特此分享一波: CustomSwipeListView.java 是个继承自ListView的类,里面调用了自定义View 类SwipeItemView.java的一个收缩的方法.其实QQ消息删除这个动画可以有很多种方法实现,这里我们介绍的方法是:常规ListView的每个Item展示方式不变,只是在Adapter类里面去绑定该显示的数据和删除等字样.具体详见如下: 自定义的ListView: package com.r

模仿QQ左滑删除

需求: 1.左滑删除 2.向左滑动距离超过一半的时候让它自动滑开,向右滑动超过一半的时候自动隐藏 3.一次只允许滑开一个item 还有,根本不需要自定义view来实现,谨防入坑 布局: <?xml version="1.0" encoding="utf-8"?> <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" and

Android自定义组合控件---教你如何自定义下拉刷新和左滑删除

绪论 最近项目里面用到了下拉刷新和左滑删除,网上找了找并没有可以用的,有比较好的左滑删除,但是并没有和下拉刷新上拉加载结合到一起,要不就是一些比较水的结合,并不能在项目里面使用,小编一着急自己组合了一个,做完了和QQ的对比了一下,并没有太大区别,今天分享给大家,其实并不难,但是不知道为什么网上没有比较好的Demo,当你的项目真的很急的时候,又没有比较好的Demo,那么"那条友谊的小船儿真是说翻就翻啊",好了,下面先来具体看一下实现后的效果吧: 代码已经上传到Github上了,小伙伴们记