如何预防'触摸'用户移动手指滑动元素时触发的事件

How to prevent 'touched' event from firing when user moves finger to slide the element

本文关键字:元素 事件 手指 触摸 何预防 用户 移动      更新时间:2023-09-26

解决方案:https://github.com/alexgibson/tap.js

我在移动Safari中iPad上的"触摸端"answers"触摸移动"事件之间存在冲突。我有像画廊一样并排放置的图像,它们有一个"触摸端"事件,在触摸端时可以翻转。然而,您也可以从一个图像滑动到另一个图像(就像在iPhone上将主屏幕滑动到下一个屏幕一样)。

现在,当我想滑动到下一个图像时,我不知道如何防止"触摸端"事件触发。很明显,我不希望图像在滑动时翻转,只希望在轻按时翻转。

到目前为止我的解决方案:

var img = $('.show-video');
var sliding = false;
img.bind('touchend', function(e) {
    if (sliding === false){
        Animate($(this), 'flip');
    }
});
img.bind('touchmove', function(){
    sliding = true;
    $(this).bind('touchend', function(){
        window.setTimeout(function(){
            sliding = false;
        }, 200)
    })
});

````

我认为这可以做得更好。

在敲击屏幕时,基本上有两个事件:touchstarttouchend。当用户触摸屏幕时,捕获第一个事件,当他停止触摸屏幕时触发第二个事件。应捕捉touchmove事件以分析手指的运动。

我不完全确定你想说什么,但我假设你正在捕捉这些事件。你能做的是:

  1. 与其在touchstart上做某事,不如在touchend上做。无论如何,这更自然,因为你举起手指后应该会发生一些事情
  2. touchstart之后,使用touchmove查看是否有任何移动。如果没有,并且调用了touchend,请执行您想要执行的敲击操作。如果有运动,做任何你想做的滑动

我希望这能有所帮助。

我曾经对此做过一次变通。

你已经解释了正在发生的事件,你也有了一个问题的线索。

例如,假设你在#galleryOverlay上有你的图库,你的滚动条就在里面

然后你所要做的就是类似的事情

$('#galleryOverlay').bind('touchstart touchmove touchmove',函数(e){e.stopPropagation();})

因此,通过这种方式,您可以将活动保存在画廊内,但可以防止它们在室外发生。

祝好运

这个库添加了一个"点击"事件,您可以使用它来监视"点击"而不是"触摸结束"。

https://github.com/alexgibson/tap.js