touchmove 事件未在 iPhone Safari 上触发

问题描述

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 事件中实现 - 所以这就是我问的原因。

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

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

解决方法

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

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...