touchEvent.touches.length在Android上始终返回1

时间:2017-03-21 14:01:07

标签: javascript android ios touch-event android-touch-event

这是我第一次处理触控设备,并在我的网站/网络应用程序中实现一些基本功能,我需要管理触控事件。

在我的应用程序流程中,在动态创建了div之后,我附加了一个touchstart事件,调用一个函数,我希望在同时触摸的数量上管理不同的任务:为了做到这一点,我想到使用touchEvent.changedTouches.length属性
https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/changedTouches)。

我有这样的事情:

$("body").append("<div id='myDiv'>Some text...</div>");
touchEvents();
...
function touchEvents() {
    var touches;
    $("#myDiv").on("touchstart", function (e) {
        touches = e.changedTouches;
        alert(touches.length);
        switch (touches.length) {
            case 1:
            {code_block_1}
            break;
            case 2:
            {code_block_2}
            break;
            default:
            {code_block_default}
        }
    });
}
...

当我在Ios(IPad 2)上使用Safari运行它时,如果我用一个,两个(或更多 - 直到9个)手指触摸它,我从警告声明中得到正确的手指数量使用,然后应用程序正确运行,如果我用双指触摸,进入开关盒:2。

当我使用Android设备时(我使用三星和NGM品牌手机测试过它 - 无论是旧手机还是最新的Android手机 - 无论是使用更新的Firefox还是Chrome)我总是得到&#34; 1&#34; 由在touchstart事件之后调用的alert(),即使我使用多个手指;因此,路线始终位于开关箱内:1选项。

我发现这似乎是由于touchEvent.touches列表的奇怪行为造成的。

事实上,如果我有以下代码

$("body").append("<div id='myDiv'>Some text...</div>");
touchEvents();
...
function touchEvents() {
    var touches;
    $("#myDiv").on("touchstart", function (e) {
        touches = e.touches;
        alert(touches.length);
        ...
    });
}

如果我用两根手指触摸表面(同时或一个接一个),我总会收到两个警告!

(当手指一个接一个地向下移动时,我也会正确地说出第一个警告&#34; 1&#34;)...

第一个(两个手指触摸不同时的第二个)提示&#34; 2&#34;,但在关闭此警报后立即触发另一个提示&#34; 1&#34;点。

作为支票,我还试图复制并浏览可在此处找到的示例代码:

https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/touches

添加三个警告e.touches.length的功能,即

$(document).ready(function() {
    document.getElementById("test").addEventListener('touchstart', function(e) {
        // Invoke the appropriate handler depending on the
        // number of touch points.
        switch (e.touches.length) {
            case 1: handle_one_touch(e); break;
            case 2: handle_two_touches(e); break;
            case 3: handle_three_touches(e); break;
            default: console.log("Not supported"); break;
        }
    }, false);
    function handle_one_touch(e) {
        touches = e.touches;
        alert(touches.length);
    }
    function handle_two_touch(e) {
        touches = e.touches;
        alert(touches.length);
    }
    function handle_three_touch(e) {
        touches = e.touches;
        alert(touches.length);
    }
});

我总是得到&#34; 1&#34;,所以它总是只调用handle_one_touch(e)函数。

因此,我认为,changedTouches.length属性总是&#34; 1&#34;。

有人知道在Android设备上是否存在关于此问题的已知问题和/或如何解决它? 提前谢谢你,费德里科

0 个答案:

没有答案