我试图捕获的“手势”是当但仅当元素(其他或相同)已经触摸时的点击。因此,触摸 (1) 按下按钮,同时触摸 (2) 点击所选选项,触摸 (1) 释放并按下按钮。
我遇到的问题是最后一点。当我释放最后一个手指时,“touchend”事件没有被触发?那么我没有办法按下按钮吗?
..“touchend”事件总是有touches.length = 0?
这是一些代码,因此您可以明白我的意思。我认为这可能是移动 Safari 中的一个错误?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Multi-touch problem</title>
<style>
#touchpane{
width:900px;
height:500px;
background-color:#333;
}
</style>
</head>
<body>
<div id="touchpane" click="void();"></div>
<script>
var tp = document.getElementById("touchpane");
tp.addEventListener('touchstart', function(e){
e.preventDefault();// to stop copy and paste
console.log("touchstart " + e.touches.length );
}, false)
tp.addEventListener('touchend', function(e){
console.log("touchend " + e.touches.length );
// not called when last finger removed?
}, false)
tp.addEventListener('touchcancel', function(e){
console.log("touchcancel");
}, false)
</script>
</body>
</html>
我可以帮助你解决一个问题,但我不知道为什么当两个手指离开屏幕时“touchend”不会触发,当我运行上面的代码时,当任何一个手指离开屏幕时“touchend”都会触发(在iPhone 4)
1) 虽然 iPhone 的“touchend”javascript 事件确实具有“touches”属性,但当最后一个手指离开屏幕时,它总是为空,因为 iPhone 的“touches”代表当前触摸屏幕的手指,而“touchend”代表当前触摸屏幕的手指。 “只有火after一根手指离开屏幕。因此,在“touchend”上,当最后一个手指抬起时,“e.touches.length”将始终为 0。
2) 您可以使用“changedTouches”属性来访问“touchend”事件中哪些触摸已更改。这是有问题的,因为它的行为不是很一致。
如果您用一根手指触摸屏幕,然后用另一根手指触摸屏幕,然后移开一根手指,则可能会发生多种情况。
如果当你移开第二根手指时,第一根手指没有任何变化,“touchend”中的事件对象将具有“touches.length = 1”(手指仍在屏幕上)和“changedTouches.length = 1” (离开屏幕的手指)。
但是,如果您在移开第二根手指时移动了第一根手指(即使是一点点),那么在“touchend”上,您的事件对象将具有“touches.length = 1”(手指仍在屏幕上)和“changedTouches.length”。 length = 2"(离开屏幕的手指+第一根手指的移动)。
我发现这篇文章非常有帮助:
http://m14i.wordpress.com/2009/10/25/javascript-touch-and-gesture-events-iphone-and-android/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)