前端面试题之DOM事件

xiaoxiao2021-02-28  8

DOM事件类

本文主要介绍面试过程中关于DOM事件可能会问到的问题。以供参考。

1. DOM事件级别

DOM0级事件 DOM0 级时间分两种,一是直接在标签内直接添加执行语句,二是定义执行函数。

<input type="text" id="test"> <input type="button" value="button" onclick="alert(document.getElementById('test').value)"> <script> document.getElementById('button').onclick=function(){ alert(document.getElementById('test').value); } </script>

DOM2 级事件 第一个参数:事件名称 第二个参数:执行函数 第三个参数:指定冒泡还是捕获,默认是false,冒泡。

element.addEventListener('click',function(){},false)

DOM3 级事件 同DOM2级一样,只不过添加了更多的事件类型,鼠标事件、键盘事件。

element.addEventListener('keyup',function(){},false)

关于DOM事件级别,只要能答出来就行,不会问太多的问题,或者是出题目去做。

2. DOM事件类型

事件类型分两种:事件捕获、事件冒泡。 事件捕获就是由上往下,从事件发生的顶点开始,逐级往下查找,一直到目标元素。 事件冒泡就是由下往上,从具体的目标节点元素触发,逐级向上传递,直到根节点。具体过程参考下图理解:

3. DOM事件流

事件流简单说就是,浏览器在当前页面与用户交互过程中时间的传递过程。DOM完整的事件流包括三个阶段:事件捕获阶段、目标阶段和事件冒泡阶段。事件通过捕获到达目标元素,这个时候就是目标阶段。从目标节点元素将事件上传到根节点的过程就是第三个阶段,冒泡阶段。 对应上图自己体会体会。

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

很多人,包括我之前都认为,第一个接收到事件的对象是document,其实不是,第一个对象是window对象。之后才是document对象。我们通过代码来演示整个捕获的流程。

<div id="dom"> <style media="screen"> #dom{ width: 300px; height: 100px; background: red; color: #fff; text-align: center; line-height: 100px; } </style> 目标元素 </div> <script type="text/javascript"> var dom = document.getElementById('dom'); dom.addEventListener('click', function (e) { console.log('this div'); }, true); window.addEventListener('click', function (e) { console.log('this window'); }, true); document.addEventListener('click', function (e{ console.log('this document'); }, true); document.documentElement.addEventListener('click', function (e) { console.log('this html'); }, true); document.body.addEventListener('click',function (e) { console.log('this body'); }, true); </script>

5. Event对象的常见应用

Event 对象的方法有很多,给大家推荐一个文章去参考,javaScript事件(四)event的公共成员(属性和方法),这里就介绍几种,比较有代表性的。 event.preventDefault() //阻止标签的默认行为,比如说 a 标签, 可以阻止它的默认跳转行为。 event.stopPropagation() //阻止冒泡。有些情况就不需要冒泡时间,比如说,父子元素分别绑定事件,如果不给子元素设置阻止冒泡,那么在子元素响应事件时,父元素也会响应这个事件,这时候就需要阻止冒泡。 event.stopImmediatePropagation() //设置事件响应优先级,同一个元素绑定了两个事件的话,在需要设定执行顺序是就需要这个方法。 更多的Event对象属性方法也可以参考W3CSchool 的 Event 对象 讲解。

6. 自定义事件

这里介绍的比较简单,具体的详细自定义事件相关知识可以自行搜索了解,好文章也有很多,就不一一列举了。

var eve = new Event('test'); //通过new Event 创建事件 dom.addEventListener('test', function () { //注册事件 console.log('test dispatch'); }); setTimeout(function () { dom.dispatchEvent(eve); //触发事件 }, 1000);

除了通过上述方式,还可以通过 customEvent(), 除了事件名,还可以添加一个Object自定义参数。 用法与上一种方法是相同的。

本文就介绍这么多,希望能对你有所帮助。

转载请注明原文地址: https://www.6miu.com/read-1400008.html

最新回复(0)