移动Javascript:prevent";touchend“;处理程序,如果用户点击停止滚动

移动Javascript:prevent";touchend“;处理程序,如果用户点击停止滚动,javascript,android,ios,cordova,mobile-safari,Javascript,Android,Ios,Cordova,Mobile Safari,我在移动JS开发中面临一个问题:(我在iOS中谈论我的问题,但我无法解决我的问题,然后我会担心Android…) 我有一个可滚动的元素列表(iMessage应用程序样式,如xCode中的TableView),我在该列表中添加了一个touchend EventListener,以检测用户何时想了解更多关于一个元素的信息。我使用这些应用于文档的EventListener来区分滚动和“点击”(因为滚动也会触发touchend事件): var move = false; var star

我在移动JS开发中面临一个问题:(我在iOS中谈论我的问题,但我无法解决我的问题,然后我会担心Android…)

我有一个可滚动的元素列表(iMessage应用程序样式,如xCode中的TableView),我在该列表中添加了一个touchend EventListener,以检测用户何时想了解更多关于一个元素的信息。我使用这些应用于文档的EventListener来区分滚动和“点击”(因为滚动也会触发touchend事件):

    var move = false;
    var startX = 0,
        startY = 0;
    var sameElement;

    document.addEventListener("touchstart", function (event) {

        move = false;
        startX = event.touches[0].clientX;
        startY = event.touches[0].clientY;
        sameElement = event.target;

    });

    document.addEventListener("touchmove", function (event) {

        var X = 10;
        var Y = 10;
        if (sameElement == event.target) {
            X = 120; // Increase abscissa tolerance margin if the move stay on the same element
        }
        if (Math.abs(event.touches[0].clientX - startX) > X ||
            Math.abs(event.touches[0].clientY - startY) > Y) {
            move = true;
        }
    });
然后,如果用户滚动:

someElement.addEventListener("touchend", function (event) {
    if(move) {
         return;
    }
});
问题是,在iOS原生应用程序(我猜也是Android)中,用户可以通过轻触“停止”快速滚动,例如:如果你在Facebook的messenger应用程序上“快速”滚动,然后触摸屏幕,滚动动画停止,而你则停留在对话列表中

在我的例子中,如果我这样做,附加到someElement的touchend事件会立即触发,我想模拟本机应用程序的行为(如果用户快速滚动并直接触摸屏幕,它将停止滚动,并阻止触发touchend代码。显然,如果用户再次触摸屏幕,当某个元素没有滚动时,它将触发touchend事件…).我发现如果用户触摸屏幕,iOS会自动停止滚动,但我无法阻止触发touchend事件

我找到了一个,那个家伙似乎找到了一个解决方案(见编辑),我试过了,但没用……或者我真的不明白他的意思

非常感谢


David

创建一个间隔计时器来检测列表顶部的滚动变化。如果它在时间前后没有变化,请处理。您好,Hanh Le,谢谢您的帮助!但计时器基础解决方案(对我来说)似乎不“干净”,我想在该应用程序中避免间隔,您认为不使用任何计时器可以解决此问题吗(间隔/超时…?非常感谢!我不知道这个问题。事件是在WebView中生成的,您无法直接处理它(没有滚动停止事件)。