我试图捕捉的“手势”只是当一个元素(其他或同一个)已经触摸它时的轻击。因此,触摸(1)按下按钮,同时触摸(2)轻触所选选项,触摸(1)释放按钮。
我遇到的问题是最后一点。当我释放最后一根手指时,“touchend”事件没有被解雇?所以我无法按下按钮?
..“touchend”事件总是有touches.length = 0?
这是一些代码,所以你可以看到我的意思。我想这可能是移动游猎中的一个错误?
<!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>
答案 0 :(得分:3)
我可以帮助你解决一个问题,但我不知道为什么当两个手指离开屏幕时“touchend”没有触发,当我在上面运行你的代码时,当任一个手指离开时,“touchend”会触发屏幕(在iPhone 4上)
1)虽然iPhone的“touchend”javascript事件确实具有“触摸”属性,但当最后一根手指离开屏幕时它总是空的,因为iPhone的“触摸”代表当前触摸屏幕的手指,并且“touchend”仅在手指离开屏幕后触发。因此,在“touchend”中,当最后一根手指被抬起时,“e.touches.length”将始终为0。
2)您可以使用“changedTouches”属性访问“touchend”事件中已更改的触摸。这是有问题的,因为它的行为不是很一致。
如果用一根手指触摸屏幕,然后用另一根手指触摸屏幕,然后移开一根手指,可能会发生很多事情。
如果当你移开第二根手指时,第一根手指没有任何变化,“touchend”中的事件对象将有“touches.length = 1”(手指仍在屏幕上)和“changedTouches.length” = 1“(离开屏幕的手指)。
但是,如果你在移动第二根手指时移动第一根手指(甚至一点点),那么在“touchend”上你的事件对象将会有“touches.length = 1”(手指仍在屏幕上)并且“changedTouches.length = 2”(离开屏幕的手指+第一根手指的移动)。
我发现这篇文章非常有帮助:
http://m14i.wordpress.com/2009/10/25/javascript-touch-and-gesture-events-iphone-and-android/
答案 1 :(得分:0)
touchend类型的TouchEvent的e.touches.length总是为0
失踪的最后一次触球事件可能取决于接触的目标。如果两个手指同时抬起并且两个手指具有相同的目标,那么只有一个触发器会触发,但它将在e.changedTouches对象中同时触摸。如果目标不同,那么您将看到两个touchend事件,每个事件都在changedTouches对象中具有关联的触摸。
此外,最令人费解的是,当你抬起两根手指中的一条时,你会得到同样的行为,就好像你已经抬起两根手指一样。然后,当剩下的手指移动时,它将触发另一个触摸开始,触摸时手指的原始标识符。结果是,在触摸结束时没有办法告诉触摸已经结束直到任意时间量(当剩余手指移动时)。
要验证这一点,您需要记录每个事件中的touchList。 我找到的唯一解决方法是将缓存touchstart事件,setInterval缓存半秒,然后希望剩下的手指触发了我可以用来调和状态的触摸开始。好悲伤!