Skip to content
文章目录

touch-action

mousemove 报 treated as passive 错误

touch-action:none 解决 passive 错误

css
html {
  touch-action: none;
}

touch-action:none 还可以用在使用 pointermove 事件实现拖拽或者拖移的场景,不然会没有效果。

touch-action是移动端一个与手势触摸密切相关的 CSS 属性,原本源自 windows phone 手机,微软系,后来被 Chrome 吸收借鉴,Firefox 浏览器跟上,然后 Safari 也部分支持,目前已经可以说是在移动端可以畅行的 CSS 属性。

支持的关键字值有:

css
touch-action: auto;
touch-action: none;
touch-action: pan-x;
touch-action: pan-left;
touch-action: pan-right;
touch-action: pan-y;
touch-action: pan-up;
touch-action: pan-down;
touch-action: pinch-zoom;
touch-action: manipulation;
  • auto 是默认值,表示手势操作什么的完全有浏览器自己决定(如<meta>元素的viewport设置)。
  • manipulation 表示浏览器只允许进行滚动和持续缩放操作,类似双击缩放这种非标准操作就不可以。想当初,click 事件在移动端有个 300ms 延时,就是因为避免和手机双击行为发生冲突。然而,当我们设置了touch-action:manipulation干掉了双击行为,则显然,300ms 延时就不复存在,因此,下面的 CSS 声明可以用来避免浏览器 300ms 延时问题。
css
html {
  touch-action: manipulation;
}

上面 2 个关键字属性值(auto 和 manipulation)是 Safari 唯一支持的两个 touch-action 属性值,iOS Safari 就是为用户操碎了心,就怕开发者把一些对用户无障碍访问有帮助的东西去掉,例如不支持 touch-action:none 以及 iOS10+中设置 viewportuser-scalable=no 已经无法阻止用户手指缩放屏幕了

IOS10+viewportuser-scalable=no设置已无效

参考资料

CSS touch-action 简介与 treated as passive 错误解决