解决移动端网页中滑动时不触发touchend事件

本文介绍在H5移动端开发中,通过touch事件防止列表滚动时误触发click操作的方法。利用touchstart、touchmove和touchend事件结合,判断是否为滑动而非点击,有效避免误操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在使用H5做移动端开发的时候时候一般会用touch事件来替代鼠标的click事件,但是如果页面中需要进行列表滚动时,由于之前绑定了touchend事件,这样在滑动后就会自动触发thouchend事件发生跳转等操作,如何避免误操作呢,搜索相关资料后发现有解决的办法,而且非常简单粗暴。具体的做法就是绑定touch的三种事件,然后放置一个全局变量,touhcstar时设变量为false,touchmove时给全局变量为true,touchend时判断变量为真或假,为假时则触发事件,为真时返回,代码如下:

var isMoving = false;
$('#id').on('touchstart',function {
    isMoving = false;
});
$('#id').on('touchmove',function {
    isMoving = true;
});
$('#id').on('touchend', function(e) {
        if (isMoving) {
            return;
        }       
        //这里执行点击后要执行的代码        
    });

这样在滑动时就不会误触了,但是这样做带来了另一个问题,就是人手的精确性和触摸屏的精确性,稍微有一点滑动话就会判断为在滑动状态并不会执行跳转代码,要很准确了一点都不移动才会跳转,经常需要点击3到4次才会进行,很烦人,于是我对代码又进行了一点改动,就是发生touchmove移动事时候计算一下移动了多少距离,如果这个距离很微小的话,认为只是误触和手抖动,如果移动距离较大才会认为是发生了滑动,优化后的代码如下:

var isMoving = false;
var x1;
var x2;
$('#id').on('touchstart',function {
    isMoving = false;
    var _touch = e.originalEvent.targetTouches[0];
    x1= _touch.pageX;
});
$('#id').on('touchmove',function {
    var _touch = e.originalEvent.targetTouches[0];
	x2= _touch.pageX;
	if(Math.abs(x2-x1)>3){
        isMoving = true;
    }
});
$('#id').on('touchend', function(e) {
        if (isMoving) {
            return;
        }       
        //这里执行点击后要执行的代码        
    });

这样改完代码后,再点击就比较顺畅了,不管是滑动还是点击,都能准确的识别,非常方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值