javascript - 如何防止本机浏览器默认捏缩放行为?
问题描述
这个问题已经以几种不同的方式提出,但没有一个令人满意。
本机浏览器(例如 Mac 版 Google Chrome)默认支持“捏缩放”手势,这将缩放整个视口。如何禁用(响应)此默认行为,以便我可以编写自己的捏合/缩放逻辑?谷歌地图https://maps.google.com/似乎已经实现了这一点,因为在地图上捏只会缩放地图区域,而 UI 的其余部分保持不变,而在左侧边栏上捏会显示默认行为。
我尝试了一些方法,例如 HTML"viewport"
元标记、CSStouch-action: none;
和 JavaScript document.addEventListener('touchmove', e => { e.preventDefault() })
,但它们似乎都只适用于移动设备。
解决方案
我不小心找到了适用于 Chrome 的解决方案。你基本上必须参加preventDefault
活动"wheel"
。ctrlKey
如果true
它是一个捏事件而不是滚动。
element.addEventListener('wheel', event => {
const { ctrlKey } = event
if (ctrlKey) {
event.preventDefault();
return
}
}, { passive: false })
我猜这就是谷歌地图的做法。
(大多数)跨浏览器解决方案可能是所提到的技术的组合:user-scalable=no
在"viewport"
支持它的浏览器的元标记中,在本机 Chrome 的这个标记中。
推荐阅读
- c - 为什么带有寄存器操作数的 TEST 比带有内存和立即操作数的 CMP 运行得慢?
- pandas - 按 Pandas Datafram 上某些列的每个组合进行分组
- c++ - C ++中这两个向量声明之间的区别
- bash - 如何通过注入变量来绕过 if 指令
- regex - 删除单行中的固定文件扩展名
- java - 如何在 Spring Boot 中从根键读取值
- javascript - 如果文档不存在,angularfire6 文档更新命令会失败吗?
- http - 如何在 react-admin 中动态更改 http 标头?
- java - 在不使用数组列表的情况下在 Java 中计算概率?
- java - 为什么像 List/Map/Set.of(...) 或 Arrays.asList(...) 这样的方法会返回一个不可变列表?