const btn = document.querySelector('#btn')
btn.addEventListener('click', () => {
console.log(this) // this 是 window 对象
}, false)
function handler(event) {
console.log(this) // 监听 btn 事件时,this 是监听的 DOM 元素
console.log(event.currentTarget) // 值同 this
console.log(event.target) // 实际处理事件的 DOM,比如监听 body 的 click,点击了 btn,那么 target 是 btn
console.log(event.type) // addEventListener 的事件名
event.preventDefault()
}
btn.addEventListener('click', handler, false)
// 移除事件监听
btn.removeEventListener('click', handler)
event 对象会作为事件监听函数的参数传入监听函数
event.type
事件名event.target
处理事件的 DOMevent.currentTarget
绑定事件监听的 DOMevent.preventDefault()
阻止默认行为event.stopPropagation()
停止冒泡load
页面中所有资源加载完或者图片加载完触发unload
页面卸载时触发resize
浏览器窗口被缩放时触发scroll
页面滚动时触发blur
、focus
、focusin
、focusout
失去焦点、获得焦点、获取焦点冒泡版、失去焦点冒泡版window.DOMContentLoaded
HTML 加载完触发,无需等待图片等资源hashchange
页面 hash 发生改变时触发,可以用 location.hash
获取改变后的 hash混杂模式下 scroll 事件的监听
通过 document.compatMode
可以判断页面的模式,如果该值等于 BackCompat
这表示该页面处于混杂模式(处于混杂模式可能是因为没有设置 doctype html
)。混杂模式下 scroll
监听的是 body.scrollTop
而不是 document.documentElement.scrollTop
function getScrollTop() {
let scrollTop;
if(document.compatMode === 'BackCompat') {
scrollTop = document.body.scrollTop
} else {
scrollTop = document.documentElement.scrollTop
}
return scrollTop
}
event.wheelDelta
的正负判断滚动方向,向后滚动为 -120,向前滚动为 120。移动端 click
在移动端设备上,可点击的单指触摸可点击元素会先触发 mouseover 事件。可点击元素是指有默认行为(如 a 标签)或者添加了 onclick 事件监听的元素。
click 的触发顺序
click 能否触发取决于 click 前面依赖的事件是否成功触发。
客户端坐标
这些属性被保存在 event 对象中
keyCode
小写字母或数字的 ASCII 码,其他按键也有对应编码。可以通过 String.fromCharCode 转为实际的字母。key
用来代替 keyCode
,如果按下的是字符键,则值是字符(如 k 或者 A),如果是非字符键,则是键名(如 Shift)function handleTouchEvent(event) {
// 只针对一个触点
if (event.touches.length == 1) {
let output = document.getElementById("output");
switch(event.type) {
case "touchstart":
output.innerHTML += `
Touch started:` +
`(${event.touches[0].clientX}` +
` ${event.touches[0].clientY})`;
break;
case "touchend":
output.innerHTML += `
Touch ended:` +
`(${event.changedTouches[0].clientX}` +
` ${event.changedTouches[0].clientY})`;
break;
case "touchmove":
event.preventDefault(); // 阻止滚动
output.innerHTML += `
Touch moved:` +
`(${event.changedTouches[0].clientX}` +
` ${event.changedTouches[0].clientY})`;
break;
}
}
}
document.addEventListener("touchstart", handleTouchEvent);
document.addEventListener("touchend", handleTouchEvent);
document.addEventListener("touchmove", handleTouchEvent);
JS高程的内容已经过时,去 MDN 查看最新方法。