1、什么是addEventListener
语法
target.addEventListener(type, listener, options)
target.addEventListener(type, listener, useCapture)
type 表示监听事件类型的字符串
listener 一个实现 EventListener 接口的对象或者是一个函数
options 一个指定有关 listener 属性的可选参数对象
capture: Boolean ,表示 listener 会在该类型的事件捕获阶段传播到 EventTarget 时触发
once: Boolean ,表示 listener 在添加之后最多只调用一次,会在调用之后自动移除
passive:Boolean,表示 listener 永远不会调用 preventDefault()
useCapture Boolean,表示是否用捕获模式捕获事件。默认是false,即使用冒泡模式
示例
window.addEventListener('click', function(event) {
console.log('click!')
}, {
capture: false,
once: false
})
window.addEventListener('click', {
handleEvent: function(event) {
console.log('click!')
}
})
解释
EventTarget.addEventListener()方法将指定的监听器注册到EventTarget上,当该对象触发指定的事件时,指定的回调函数就会被执行。事件目标可以时一个文档上的元素ELement,Document,或Window或者任何其他支持事件的对象(比如XMLHttpRequest)
2、什么情况下会用到useCapture为true
资源错误监控
当一项资源(css、js、img)加载失败,加载资源的元素会触发一个Event接口的error,这些error事件不会向上冒泡到window,但能被捕获。
我们使用 addEventListener 捕获资源加载错误的时,要将 useCapture 设为true
window.addEventListener('error', (event) => {
if(event instanceof ErrorEvent) {
console.log('JS错误')
}else if(event instanceof Event) {
console.log('资源加载错误')
}
}, true)