1. 基本概念:DOM 事件的级别
  2. DOM 事件模型
  3. DOM 事件流
  4. 描述 DOM 事件捕获的具体流
  5. Event 对象的常见应用
  6. 自定义事件
  7. 移动端触摸事件

事件级别

  1. DOM0 element.=function(){}
  2. DOM2 element.addEventListener('click', function(){}, false) //冒泡false和捕获true
  3. DOM3 element.addEventListener('keyup', function(){}, false)

事件流

面试-DOM事件-事件流.png

描述 DOM 事件捕获的具体流程

面试-DOM事件-事件捕获流程.png

  1. window.addEventListener(
  2. "click",
  3. function (e) {
  4. console.log("window captrue");
  5. },
  6. true
  7. );
  8. document.addEventListener(
  9. "click",
  10. function (e) {
  11. console.log("document captrue");
  12. },
  13. true
  14. );
  15. document.documentElement.addEventListener(
  16. "click",
  17. function (e) {
  18. console.log("html captrue");
  19. },
  20. true
  21. );
  22. document.body.addEventListener(
  23. "click",
  24. function (e) {
  25. console.log("body captrue");
  26. },
  27. true
  28. );
  29. ev.addEventListener(
  30. "click",
  31. function (e) {
  32. console.log("ev captrue");
  33. },
  34. true
  35. );

Event 对象的常见应用

  1. event.preventDefault(); // 阻止默认事件(a标签)
  2. event.stopPropagation(); // 阻止冒泡
  3. event.stoplmmediatePropagation(); //绑定两个事件触发A事件阻止B事件发生
  4. event.currentTarget; //返回绑定事件的元素
  5. event.target; //返回触发事件的元素

自定义事件(code

  1. var eve = new Event("custome");
  2. ev.addEventListener("custome", function () {
  3. console.log("custome");
  4. });
  5. events.addEventListener(
  6. "click",
  7. function () {
  8. window.dispatchEvent(eve);
  9. },
  10. true
  11. );

移动端触摸事件

  1. touchstart:当手指触碰到屏幕的时候触发
  2. touchmove:当手指在屏幕上滑动的时候触发
  3. touchend:当手指离开屏幕的时候时候触发
  4. touchcancel 事件:当系统停止跟踪触摸的时候触发(少用)

touches:表示当前跟踪的触摸操作的 touch 对象的数组。

targetTouches:特定于事件目标的 Touch 对象的数组。

changeTouches:表示自上次触摸以来发生了什么改变的 Touch 对象的数组。

每个 touch 对象包含的属性:

  1. clientX:触摸目标在视口中的 x 坐标。
  2. clientY:触摸目标在视口中的 y 坐标。
  3. identifier:标识触摸的唯一 ID。
  4. pageX:触摸目标在页面中的 x 坐标。
  5. pageY:触摸目标在页面中的 y 坐标。
  6. screenX:触摸目标在屏幕中的 x 坐标。
  7. screenY:触摸目标在屏幕中的 y 坐标。
  8. target:触目的 DOM 节点目标。

冒泡

当点击一个元素触发事件时. 事件会先从元素的最外层父元素一层一层进入到触发的元素, 然后在从触发元素一层一层返回到最外层父元素, 从最外层一层一层进入的阶段叫事件捕获阶段, 从最里层一层一层往外的阶段叫事件冒泡

事件委托

事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件

好处:给重复的节点添加相同操作,减少 dom 交互,提高性能

实现思路:给父组件添加事件,通过事件冒泡,排查元素是否为指定元素,并进行系列操作