事件流

事件冒泡

事件 - 图1

事件捕获

事件 - 图2

DOM事件流

“DOM2级事件”规定的事件流包括三个阶段:
事件捕获阶段 → 处于目标阶段 → 事件冒泡阶段。
事件 - 图3

2 事件处理程序

事件 - 图4

3 示例代码

按钮只执行一次。
事件 - 图5

DOM0级事件

elemt.onclick=fn()

DOM2级事件

addEventListener()

事件 - 图6
addEventListener()方法添加的事件只能使用removeEventListener()事件移除;(重要:最后的布尔值要统一);
addEventListener()方法添加的匿名函数无法使用removeEventListener事件移除;

removeEventListener()

语法:element.removeEventListener(event, function, useCapture)
事件 - 图7

示例

点击事件

  1. function savePoint(event){
  2. point.x = event.pageX
  3. point.y = event.pageY
  4. }

添加

  1. mounted(){
  2. window.addEventListener('click',savePoint)
  3. }

移除

  1. unmounted(){
  2. window.removeEventListener('click',savePoint)
  3. }

注意:事件回调函数需要为同一个函数。

IE事件

attachEvent()和removeEvent()

attachEvent和addEventListener中的this指向不同。
在使用attachEvent方法的情况下,事件处理程序会在全局作用域中运行,因此this等于window。
事件 - 图8

事件兼容方法封装

创建:

事件 - 图9

使用:

事件 - 图10

4 事件对象

事件 - 图11

5 示例代码:

事件 - 图12

6 UI事件

当用户与页面上的元素交互时触发

load

当页面完全加载后在window上面触发,当所有框架都加载完毕时在框架集上面触发,当图像加载完毕时在img元素上面触发,或者当嵌入的内容加载完毕时在object元素上面触发。

unload

当页面完全卸载后在window上面触发,当所有框架都卸载后在框架集上面触发,或者当嵌入的内容卸载完毕后在object元素上面触发。

abort

在用户停止下载过程时,如果嵌入的内容没有加载完,则在object元素上面触发。

error

当发生JavaScript错误时在window上面触发,当无法加载图像时在img元素上面触发,当无法加载嵌入内容时在object元素上面触发,或者当有一或多个框架无法加载时在框架集上面触发。

select

当用户选择文本框(input或texterea)中的一个或多个字符时触发。

resize

当窗口或框架的大小变化时在window或框架上面触发。

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的区别

事件 - 图13

mouseover

在鼠标指针位于一个元素外部,然后用户将其首次移入另一个元素边界之内时触发。不能通过键盘触发这个事件

mouseup

在用户释放鼠标按钮时触发。不能通过键盘触发这个事件。

修改键Shift、Ctrl、Alt

事件 - 图14
事件 - 图15

鼠标按钮

事件 - 图16
事件 - 图17

更多的事件信息

事件 - 图18

鼠标滚轮事件mousewheel

事件 - 图19
事件 - 图20

触摸设备

事件 - 图21

9 键盘与文本事件

当在文档中输入文本时触发

键盘事件keydown、keypress、keyup

事件 - 图22

文本事件textInput

在文本插入文本框之前会触发textInput事件。
事件 - 图23

键码

事件 - 图24

10 合成事件

当为IME(输入法编辑器)输入字符时触发;
事件 - 图25

11 变动事件

当底层DOM结构发生变化时触发

12 DOM变动事件

事件 - 图26
事件 - 图27

13 HTML5事件

contextmenu

事件 - 图28

beforeunload

关闭和刷新页面时提示信息。无法自定义。
细节:https://developer.mozilla.org/zh-CN/docs/Web/Events/beforeunload
事件 - 图29

pageshow和pagehide

加快页面缓冲
事件 - 图30
事件 - 图31

hashchange

URL#后面的数据变化之后触发;

事件 - 图32
事件 - 图33

14 设备事件

主要介绍设备变动时触发的事件。

orientationchange

移动设备方向事件:
移动设备方向的属性值:orientation
事件 - 图34

MozOrientation

事件 - 图35

deviceorientation

事件 - 图36
事件 - 图37
事件 - 图38
devicemotion
事件 - 图39
事件 - 图40

15 触摸与手势事件

touchstart

touchmove

touchend

事件 - 图41
事件 - 图42

16 内存和性能

事件委托

利用DOM事件流,捕获》目标》冒泡的机制;进行事件程序处理。
示例代码:
事件 - 图43

移除事件处理程序

移除空的事件处理程序提升性能。

  1. DOM0级清除:element.onclick = null;
  2. DOM2级清除:element.removeEventListener()
  3. 页面移除:unload;事件进行移除。

事件 - 图44
事件 - 图45

17 模拟事件

事件 - 图46

模拟鼠标事件

事件 - 图47
事件 - 图48
事件 - 图49

示例代码

事件 - 图50

模拟键盘事件

模拟其他事件

事件 - 图51

自定义DOM事件

事件 - 图52
能力测试是否支持DOM3级事件
事件 - 图53

示例代码

事件 - 图54