主题
事件处理
定义事件
标签事件
html
<button onclick="handleClick()">Btn</button>
<script>
const handleClick = function () {
console.log('btn click')
}
</script>
onXxx
html
<button id="btn">btn</button>
<script>
const btn = document.querySelector('#btn')
btn.onclick = function () {
console.log('btn click')
}
</script>
EventListener
addEventListener
有三种语法形式,如下:
addEventListener(type, listener)
:默认情况下会在冒泡阶段触发监听器。addEventListener(type, listener, useCapture)
:是否在捕获阶段触发监听器,默认为false
。addEventListener(type, listener, options)
:支持多个可选参数capture
:是否在捕获阶段触发监听器,默认为false
。once
:是否只触发一次监听器,默认为false
。passive
:是否在监听器中调用preventDefault
,默认为false
。signal
:一个AbortSignal
对象,用于取消监听器。
html
<button id="btn">btn</button>
<script>
const btn = document.querySelector('#btn')
const handleClick = function () {
console.log('btn click')
}
btn.addEventListener('click', handleClick) // 添加事件监听器
btn.removeEventListener('click', handleClick) // 移除事件监听器
</script>
常见事件
加载和卸载事件
- DOMContentLoaded:在 Document 完全加载并解析后触发,无需等待样式表、图像和子框架完成加载。
- readystatechange:在 Document 的 readyState 属性发生变化时触发。
拖放事件
剪切板事件
event
事件对象
event.preventDefault()
:阻止默认行为。event.stopPropagation()
:阻止事件传播。event.target
:触发事件的对象。event.currentTarget
:被监听的对象。
提示
event.currentTarget
永远都是指向被监听的对象,而 event.target
会随着使用者触发的对象去改变。
自定义事件
js
// e 代表触发的事件对象
window.addEventListener("test", function (e) {
if (e.myAttr === "demo") {
alert("key值为demo,添加成功!")
}
}, false)
// 创建一个事件对象,名字为 test
let hbEventObj = new Event("test")
// 给事件对象添加一个属性,叫做 myAttr
hbEventObj.myAttr = "demo"
// 触发事件
window.dispatchEvent(hbEventObj)