这是我第一次处理触控设备,并在我的网站/网络应用程序中实现一些基本功能,我需要管理触控事件。
在我的应用程序流程中,在动态创建了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设备上是否存在关于此问题的已知问题和/或如何解决它? 提前谢谢你,费德里科