addEventListener 以及 vue 中的 .passive 修饰符
https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener
添加事件
// 语法 |
options 可选,可用的选项如下:
capture: Boolean,默认 false,等价于以前的 useCapture 参数
once: Boolean,默认 false,如果是 true,表示 listener 在添加之后最多只调用一次。 listener 也会在其被调用之后自动移除
passive: Boolean,默认 false,设置为 true 时,表示 listener 永远不会调用 preventDefault() 如果 listener 仍然调用了这个函数,客户端将会忽略它并抛出一个控制台警告。
浏览器无法预先知道一个监听器会不会调用 preventDefault(),它能做的只有等监听器执行完后再去执行默认行为,而监听器执行是要耗时的,有些甚至耗时很明显,这样就会导致页面卡顿
.passive
修饰符尤其能够提升移动端的性能
vue .passive 事件修饰符
移除事件
removeEventListener
在第三个参数是布尔值的时候,addEventListener(“foo”, listener, true) 添加的监听器,必须用 removeEventListener(“foo”, listener, true) 才能删除掉, 因为这个监听器也有可能还注册在了冒泡阶段, 如果第三个参数为 false 则直接通过 removeEventListener(“foo”, listener) 就可以删除
通过 addEventListener(“foo”, listener, {capture: true}) 添加的监听器删除时也同样需要添加 {capture: true} 来删除,当然 {capture: true} 换成 true 也可以
通过 addEventListener(“foo”, listener, {passive: true}) 添加的监听器直接通过 removeEventListener(“foo”, listener) 就可以删除了
因为一个监听器同时是 passive 和非 passive(以及同时是 once 和非 once)是说不通的,如果你添加了多个,那么后添加的会忽略
removeEventListener(“foo”, listener, {capture: true}) // {capture: true} 必须加,当然 {capture: true} 换成 true 也可以