【发布时间】:2021-02-07 23:38:21
【问题描述】:
我有一个 web 应用程序,其内部窗格位于外部窗口中。
用户可以进行各种触摸操作,例如通过两指捏合放大内窗格,不放大外窗,触摸移动以平移内窗等。
在 Android 版 Chrome 上,该应用按预期运行。
但是在 iOS 设备 (iPad) 上的 Safari,当快速双击内窗口的边界线时,整个窗口有时会缩放。
我发现可以通过在touchend 事件上添加事件监听器来防止这种副作用。
window.addEventListener('touchend', onTouchEnd5, {capture: false, passive: false});
并在绑定函数中调用event.preventDefault()。
async function onTouchEnd5( event ) {
console.log('BEG onTouchEnd5');
event.preventDefault();
};
但这会导致另一个副作用,即不会拦截按钮上的触摸点击。
我尝试在其他可能由默认行为触发的事件上添加事件监听器,例如click, dblclick, touchcancel, fullscreenchange, fullscreenerror, resize, onscroll
想法是尝试阻止这些事件的默认行为,以防万一在那里引起副作用。
(合理的是iphone/ipad can trigger unexpected events)。
从上面列出的事件中,事件onscroll 被触发。
在这个事件的绑定函数中,我添加了preventDefault():
function onScroll5( event ) {
console.log('BEG onScroll5');
event.preventDefault();
};
但我仍然可以通过快速双击内部窗口的边框线来重新调整整个窗口。
iOS 中如何防止整个窗口在双击时缩放?
注意:
整个窗口的缩放是最新的观察结果。
在此之前,我发现整个窗口在例如在窗口的另一部分用双指捏合。
在这种情况下,解决方案是在另一个事件侦听器绑定函数上添加 preventDefault。
鉴于应用中有多个事件,一个更普遍的问题是:
有没有办法防止整个窗口在任何事件中一起缩放?
谢谢
【问题讨论】:
标签: javascript ios touch-event