问题描述
touchmove
事件是否不适用于 iPhone 的 Safari 浏览器?
我不是在谈论 iOS 应用程序,只是一个普通的旧 HTML 页面,其中包含一些加载到 iPhone 的 Safari 浏览器中的 Javascript 和 jQuery。
我实际上将我的 iPhone 连接到了我的 Mac-mini——它也运行着 Safari,所以我可以在 Mac-Mini 的 Safari 控制台中看到 iPhone 上发生的一切——以及我的 touchstart
和 touchend
事件开火,但 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 是一种非常流行的设备,我必须弄清楚如何解决它,但我现在很困惑。