你的浏览器不支持canvas

Enjoy life!

面试题目 - DOM事件类

Date: Author: JM

本文章采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。

一、DOM事件类

1.1 回答的思路

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

1.2 基本概念:DOM事件的级别

DOM事件类 事件级别 备注
DOM0 element.onclick = function () {}  
DOM2 element.addEventListener(‘click’, function(){},false) ie: element.attachEvent(‘click’, function() {})
DOM3 element.addEventListener(‘keyup’, function(){},false) 主要是事件类型增加了许多

1.3 DOM事件模型

  • DOM事件模型指捕获和冒泡

dom

1.4 DOM事件流

  • 事件流
  • 事件流分三个阶段:捕获 ===》 目标阶段 ===》 冒泡

dom

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

dom

1.6 Event对象的常见应用

Event对象常见应用 备注
event.preventDefault() 阻止浏览器默认行为
event.stopPropagation() 阻止冒泡
event.stopImmediatePropagation() element.addEventListener(‘keyup’, function(){},false)
event.currentTarget 当前所绑定的事件的元素
event.target 当前被点击的元素

1.7 自定义事件

dom

  • Event 和 CustomEvent 都可以用来自定义事件
  • 他们唯一的区别就是:Event 只能传一个参数:事件名;而 CustomEvent则可以传递第二个参数,一个数据对象
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义事件</title>
</head>
<body>
<div id="target">目标元素</div>
<script>
  const evTarget = document.getElementById('target')

  /* 方法一:Event */
  const event1 = new Event('test1');
  console.log(event1)
  evTarget.addEventListener('test1', function () {
    console.log('test1 dispatch');
  });
  evTarget.dispatchEvent(event1);


  /* 方法二:CustomEvent */
  const event2 = new CustomEvent('test2', {
    detail: {
      color: 'blue'
    }
  })
  console.log(event2)

  evTarget.addEventListener('test2', function (e) {
    console.log(`test2 dispatch,data is:${JSON.stringify(e.detail)}`);
  });
  evTarget.dispatchEvent(event2);

</script>
</body>
</html>

dom


对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。