jQuery实现移动端长按事件
最近在做一个移动端的项目,其中包含几个事件。
1.点击跳转详情页。
2.长按显示遮罩层和删除按钮
3.点击删除按钮,删除此项。
(本文基于jQuery)
添加长按事件
var self = this;$(".product").on({ touchstart: function(e){ timeOutEvent = setTimeout(function(){ //此处为长按事件-----在此显示遮罩层及删除按钮 },500); }, touchmove: function(){ clearTimeout(timeOutEvent); timeOutEvent = 0; e.preventDefault(); }, touchend: function(e){ clearTimeout(timeOutEvent); if(timeOutEvent!=0){//点击 //此处为点击事件----在此处添加跳转详情页 } return false; }});
首先我对列表添加了长按事件,添加完之后,发现我的长按事件已经可以成功执行了。
但是却出现了新的问题:无论是点击或者长按,松开之后,都会执行touchend里面的方法,也就是长按或者点击 都会跳转详情页。
这个问题好处理,只需添加一个变量,来判断是否为长按事件
var self = this;var longClick =0;$(".product").on({ touchstart: function(e){ longClick=0;//设置初始为0 timeOutEvent = setTimeout(function(){ //此处为长按事件-----在此显示遮罩层及删除按钮 longClick=1;//假如长按,则设置为1 },500); }, touchmove: function(){ clearTimeout(timeOutEvent); timeOutEvent = 0; e.preventDefault(); }, touchend: function(e){ clearTimeout(timeOutEvent); if(timeOutEvent!=0 && longClick==0){//点击 //此处为点击事件----在此处添加跳转详情页 } return false; }});
这样上面的问题就完美解决了。
添加删除事件
接下来就是给遮罩层上的删除按钮添加事件
$('.product_del').click(function(){ //事件处理});
但是在这里就发现了新的问题
此处所写的方法并没有执行,而是触发了上面所写的跳转事件
所以就需要一个新的事件来覆盖原本的事件
$('.product_del').on({ touchstart: function(e){ }, touchmove: function(){ clearTimeout(timeOutEvent); e.preventDefault(); }, touchend: function(e){ clearTimeout(timeOutEvent); if(timeOutEvent!=0 ){//点击 //点击事件处理 } return false; }});
然后,整个点击跳转,长按显示删除,删除事件,就已经完美解决了。
但是,在移动端查看的时候就会发现正常的滚动事件被preventDefault屏蔽了。
滚动事件
此处有两种解决方式:
1.删除e.preventDefault();
删除preventDefault有可能会出现其它情况,不过我暂时没发现如果出现其它情况,可使用下面的方法
var touchY = 0;var longClick =0;$(".product").on({ touchstart: function(e){ longClick=0; timeOutEvent = setTimeout(function(){ //此处为长按事件-----在此显示遮罩层及删除按钮 longClick=1;//假如长按,则设置为1 },500); var touch = e.touches[0]; touchY = touch.clientY; }, touchmove: function(){ clearTimeout(timeOutEvent); timeOutEvent = 0; var touch = e.touches[0] if(Math.abs(touch.clientY - touchY) < 10){ e.preventDefault(); } }, touchend: function(e){ clearTimeout(timeOutEvent); if(timeOutEvent!=0 && self.longClick==0){//点击 //此处为点击事件----在此处添加跳转详情页 } return false; }});
删除的点击事件也是如此
评论 (1)
涉及广告推广,审核未通过
Dec 14 2020 08:47 pm