Mobile Safari - 当最后一次触摸被删除时,“touchend”事件没有触发?

2023-11-27

我试图捕获的“手势”是当但仅当元素(其他或相同)已经触摸时的点击。因此,触摸 (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(使用前将#替换为@)

Mobile Safari - 当最后一次触摸被删除时,“touchend”事件没有触发? 的相关文章

随机推荐