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+中设置 viewport 的 user-scalable=no 已经无法阻止用户手指缩放屏幕了
IOS10+的 viewport 的 user-scalable=no设置已无效