事件流
事件冒泡
事件捕获
DOM事件流
“DOM2级事件”规定的事件流包括三个阶段:
事件捕获阶段 → 处于目标阶段 → 事件冒泡阶段。
2 事件处理程序
3 示例代码
DOM0级事件
DOM2级事件
addEventListener()
addEventListener()方法添加的事件只能使用removeEventListener()事件移除;(重要:最后的布尔值要统一);
addEventListener()方法添加的匿名函数无法使用removeEventListener事件移除;
removeEventListener()
语法:element.removeEventListener(event, function, useCapture)
示例
点击事件
function savePoint(event){
point.x = event.pageX
point.y = event.pageY
}
添加
mounted(){
window.addEventListener('click',savePoint)
}
移除
unmounted(){
window.removeEventListener('click',savePoint)
}
IE事件
attachEvent()和removeEvent()
attachEvent和addEventListener中的this指向不同。
在使用attachEvent方法的情况下,事件处理程序会在全局作用域中运行,因此this等于window。
事件兼容方法封装
创建:
使用:
4 事件对象
5 示例代码:
6 UI事件
load
当页面完全加载后在window上面触发,当所有框架都加载完毕时在框架集上面触发,当图像加载完毕时在img元素上面触发,或者当嵌入的内容加载完毕时在object元素上面触发。
unload
当页面完全卸载后在window上面触发,当所有框架都卸载后在框架集上面触发,或者当嵌入的内容卸载完毕后在object元素上面触发。
abort
在用户停止下载过程时,如果嵌入的内容没有加载完,则在object元素上面触发。
error
当发生JavaScript错误时在window上面触发,当无法加载图像时在img元素上面触发,当无法加载嵌入内容时在object元素上面触发,或者当有一或多个框架无法加载时在框架集上面触发。
select
当用户选择文本框(input或texterea)中的一个或多个字符时触发。
resize
scroll
onscroll 事件在元素滚动条在滚动时触发。body元素中包含所加载页面的滚动条。
document.documentElement.scrollTop
网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth (包括边线的宽);
网页可见区域高: document.body.offsetHeight (包括边线的宽);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度:window.screen.availWidth;
scrollHeight 获取对象的滚动高度。
scrollLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth 获取对象的滚动宽度
offsetHeight 获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetLeft 获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop 获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置
event.clientX 相对文档的水平座标
event.clientY 相对文档的垂直座标
event.offsetX 相对容器的水平坐标
event.offsetY 相对容器的垂直坐标
document.documentElement.scrollTop 垂直方向滚动的值
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量
要获取当前页面的滚动条纵坐标位置,用:
document.documentElement.scrollTop;
而不是:
document.body.scrollTop;
documentElement 对应的是 html 标签,而 body 对应的是 body 标签
wheel
鼠标滚轮事件
wheel.passive(vue事件修饰符)
事件的默认行为立即执行,无需等待事件回调执行完毕执行滚动事件。
e.wheelDelta > 0 向上滚动 ,否则向下滚动
7 焦点事件
blur
在元素失去焦点时触发,这个事件不会冒泡,所有浏览器都支持它。
focus
当元素获取焦点时触发。这个事件不会冒泡;所有浏览器都支持它。
8 鼠标与滚轮事件
click
在用户单机主鼠标按钮(一般是左边的按钮)或者按下回车键时触发?。这一点对确保易访问性很重要,意味着onclick事件处理程序即可以通过键盘?也可以通过鼠标指向。
dblclick
在用户双击主鼠标按钮时触发。从技术上说,这个事件并不是DOM2级事件规范中规定的,但鉴于它得到了广泛支持,所以DOM3级事件将其纳入了标准。
mousedown
mouseenter
在鼠标光标从元素外部首次移动到元素范围之内时触发。这个事件不冒泡,而且在光标移动到后代元素上不会触发。DOM2级事件并没有定义这个事件,但DOM3级事件将它纳入了规范。
mouseleave
在位于元素上方的鼠标光标移动到元素范围之外时触发。这个事件不冒泡,而且在光标移动到后代元素上不会触发。DOM2级事件并没有定义这个事件,但DOM3级事件将它纳入了规范。
mousemove
当鼠标指针在元素内部移动时重复地触发。不能通过键盘触发这个事件。
mouseout
在鼠标指针位于一个元素上方,然后用户将其移入另一个元素时触发。又移入的另一个元素可能位于前一个元素的外部,也可能是这个元素的子元素。不能通过键盘触发这个事件。
mouseout和mouseover的区别
mouseover
在鼠标指针位于一个元素外部,然后用户将其首次移入另一个元素边界之内时触发。不能通过键盘触发这个事件
mouseup
修改键Shift、Ctrl、Alt
鼠标按钮
更多的事件信息
鼠标滚轮事件mousewheel
触摸设备
9 键盘与文本事件
键盘事件keydown、keypress、keyup
文本事件textInput
键码
10 合成事件
11 变动事件
12 DOM变动事件
13 HTML5事件
contextmenu
beforeunload
关闭和刷新页面时提示信息。无法自定义。
细节:https://developer.mozilla.org/zh-CN/docs/Web/Events/beforeunload
pageshow和pagehide
hashchange
URL#后面的数据变化之后触发;
14 设备事件
orientationchange
移动设备方向事件:
移动设备方向的属性值:orientation
MozOrientation
deviceorientation
15 触摸与手势事件
touchstart
touchmove
touchend
16 内存和性能
事件委托
利用DOM事件流,捕获》目标》冒泡的机制;进行事件程序处理。
示例代码:
移除事件处理程序
移除空的事件处理程序提升性能。
- DOM0级清除:element.onclick = null;
- DOM2级清除:element.removeEventListener()
- 页面移除:unload;事件进行移除。