touchmove 事件未在 iPhone Safari 上触发

时间:2021-01-23 23:38:35

标签: javascript safari mobile-safari touch-event touchmove

touchmove 事件是否不适用于 iPhone 的 Safari 浏览器?
我不是在谈论 iOS 应用程序,只是一个普通的旧 HTML 页面,其中包含一些加载到 iPhone 的 Safari 浏览器中的 Javascript 和 jQuery。

我实际上将我的 iPhone 连接到了我的 Mac-mini——它也运行着 Safari,所以我可以在 Mac-Mini 的 Safari 控制台中看到 iPhone 上发生的一切——以及我的 touchstarttouchend 事件开火,但 touchmove 只是没有响应。

代码如下:

        document.addEventListener("touchstart", onMobileTouchStart, false);
        document.addEventListener("touchmove", onMobileTouchMove, false);
        document.addEventListener("touchend", onMobileTouchEnd, false);


        function onMobileTouchStart(touchStartEvent) {
            console.log("\n==>'onMobileTouchStart'!!!");            
            touchStartEvent.preventDefault();
        }


        function onMobileTouchMove(moveEvent) {
            console.log("\n==>onMobileTouchMOVE'!!!");          
            moveEvent.preventDefault();
        }


        function onMobileTouchEnd(touchEndEvent) {
            console.log("\n==>onMobileTouchEnd'!!!");
        }

我最终想要做的是实现自定义捏合缩放类型的行为,我的理解是这必须在 touchmove 事件中实现 - 所以这就是我问的原因。< /p>

除非 touchmove 开始玩得很好,否则我看不到任何其他方法来解决这个问题。

对此有任何想法、提示或解决方法吗?

1 个答案:

答案 0 :(得分:0)

我在 2021 年 5 月看到了同样的问题。如果我在 Google Chrome 上尝试,我得到的 touchmove 事件就好了,但是 Safari,在 14.4.2(最新版本)上,Safari 浏览器给了我初始触地事件,但是后续的 touchmove 事件没有提供给我。

很明显,浏览器正在窃取 touchmove 事件,因为它想要滚动某些东西,而像往常一样滚动会弄乱一切,因为这是 HTML / JS 规范没有真正涵盖的事情之一,因为它很神奇浏览器行为。

我有一个溢出:隐藏在我的身体标签上,所以无论如何都不应该有任何滚动。不知道如何解决这个浏览器的怪癖,因为 iPad 是一种非常流行的设备,我必须弄清楚如何解决它,但我现在很困惑。