移动Javascript:如果用户通过点按

时间:2015-05-04 01:25:28

标签: javascript android ios cordova mobile-safari

我在移动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代码。显然,如果用户再次触摸屏幕,当someElement没有滚动时,它将触发touchend事件...)。我发现如果用户触摸屏幕,iOS会自动停止滚动,但我无法阻止触发事件发生......

我找到了simiar issue on StackOverflow,这家伙似乎找到了一个解决方案(参见编辑),我已经尝试了但是它不起作用......或者我不太明白他的意思。

非常感谢!

大卫

0 个答案:

没有答案