DOM事件: DOM事件级别、DOM事件流、DOM事件模型、DOM事件捕获过程、自定义事件

前端面试中只要问到事件,就肯定会有DOM事件;
如果回答出来了,就会一直向下延申,其实这些东西都很简单,但我第一次被问到的时候,也是懵的;

DOM事件级别:
DOM0 element.onclick = function() { }
DOM1 一般只有设计规范,没有设计跟事件相关的东西;所以直接跳过
DOM2 element.addEventListener(‘click’, function() { }, false)
DOM3 element.addEventLIstener(‘keyup’, function() { }, false)

DOM3在DOM2的基础上参加了很多的事件类型;

DOM2、DOM3 中的第三个参数表示:该事件在捕获阶段触发(true)、在冒泡阶段触发(false)

DOM事件模型:
就是正常的事件 冒泡 和 捕获
向上冒泡 向下捕获

DOM事件流:
事件流就是: 浏览器在为这个页面与用户做交互的过程中,(比如我点击了鼠标左键)如何将这个左键是传到页面上的,又是如何响应的;

一共分为三个阶段:捕获 -> 目标阶段 -> 冒泡
事件通过 捕获 到达目标元素,这个阶段为 目标阶段; 从目标元素再上传到window对象 即冒泡阶段

DOM事件捕获过程:
一个事件首先会被 window捕获,其捕获流程:
window -> document -> html -> body -> … -> 目标元素

 1   <style>
 2     #ev {
 3       background: lightblue;
 4       width: 200px;
 5       height: 200px;
 6       text-align: center;
 7       line-height: 200px;
 8     }
 9   </style>
10   <div id="ev">
11     目标元素
12   </div>
13   <script>
14     var ev = document.getElementById(‘ev‘);
15     // 为了能表现出事件捕获流程,这里使用在捕获时触发事件
16     window.addEventListener(‘click‘, function() {
17       console.log(‘window capture‘);
18     }, true)
19
20     document.addEventListener(‘click‘, function() {
21       console.log(‘document capture‘);
22     }, true)
23
24     document.body.addEventListener(‘click‘, function() {
25       console.log(‘body capture‘);
26     }, true)
27
28     ev.addEventListener(‘click‘, function() {
29       console.log(‘ev capture‘);
30     }, true)
31   </script>

Event对象的常见应用:
event.preventDefault()
阻止 元素的默认行为(如链接的跳转)

event.stopPropagaation()
阻止捕获和冒泡阶段中当前事件的进一步传播。

event.stoplmmediatePropagation()
阻止事件冒泡并且阻止相同事件的其他侦听器被调用。
备注:如果有多个相同类型事件的事件监听函数绑定到同一个元素,当该类型的事件触发时,它们会按照被添加的顺序执行。如果其中某个监听函数执行了 event.stopImmediatePropagation() 方法,则当前元素剩下的监听函数将不会被执行。

event.currentTarget(当前所绑定的事件的元素) event.target(当前被点击元素)
这两个一般都是放在一起问的:
备注: 事件代理: 把子元素的相同事件都放在父元素上,这样只要绑定一次就可以实现多个元素的使用。在这样的情况下,你就需要去判断到底是哪一个子元素被点击了;这里就要用到event.target 。

自定义事件
这属于是进阶了,一般情况下问到这里,你就稳了; 在实际开发中也会经常用到。

    var eve = new Event(‘custome‘);
    ev.addEventListener(‘custome‘, function() {
      console.log(‘custome capture‘);
    })
    ev.dispatchEvent(eve);

原文地址:https://www.cnblogs.com/xuhua123/p/11665399.html

时间: 2025-01-09 07:08:11

DOM事件: DOM事件级别、DOM事件流、DOM事件模型、DOM事件捕获过程、自定义事件的相关文章

javascript和jquey的自定义事件小结

“通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用对象B的某个方法,实现交互:直接方法调用本质上也是属于一种特殊的发送与接受消息,它把发送消息和接收消息合并为一个动作完成: 方法调用方和被调用方被紧密耦合在一起:因为发送消息和接收消息是在一个动作内完成,所以无法做到消息的异步发送和接收: 2)对象A生成消息->将消息通知给一个事件消息处理器(Obs

js自定义事件的实现探索

我们一般所熟悉的事件,都是这样的:onclick,onmouseover,ontouchstart,onfocus... 但这里要讨论自定义事件的实现,包含:事件注册/监听.事件分发. 有两种方式去实现: 自己实现事件管理器:CustomEventManager 使用document.createEvent 先说第一种方式 CustomEventManager的实现 要实现一个完整的事件体系,必须包含2大功能:注册/监听.触发,用伪代码表示: function CustomEventManage

详解javascript实现自定义事件

这篇文章主要为大家介绍了javascript实现自定义事件的方法,自定义事件,顾名思义,就是自己定义事件类型,自己定义事件处理函数,javascript如何实现自定义事件,需要了解的朋友可以参考下 我们平时在操作dom时候经常会用到onclick,onmouseover等一系列浏览器特定行为的事件, 那么自定义事件,顾名思义,就是自己定义事件类型,自己定义事件处理函数,在合适的时候需要哪个事件类型,就去调用哪个处理程序 1.js所支持的浏览器默认事件 浏览器特定行为的事件,或者叫系统事件,js默

自定义事件的触发dispatchEvent

1. 对于标准浏览器,其提供了可供元素触发的方法:element.dispatchEvent(). 不过,在使用该方法之前,我们还需要做其他两件事,及创建和初始化.因此,总结说来就是: document.createEvent() event.initEvent() element.dispatchEvent() 举个例子: var dom = document.querySelector('#id') document.addEventListener('alert', function (e

jquery的自定义事件通过on绑定trigger触发

jquery绑定自定义事件,可以实现预先绑定好一个处理方法,当需要使用的时候利用jquery trigger来触发自定义事件,以达到方便快捷的目的.我们来假设一个这样的场景,一个textarea中的字数计算,如果是直接键盘输入或者粘贴进来的话,是可以使用input方法检测到,但是如果是通过js插入的文本,这个时候input事件就监测不到了,这个时候如果我们事先给绑定一个myChange事件,它的回调函数就是来处理计算其中的文本字数的,我们在使用js给这个textarea赋值以后,连缀写上.tri

第四十四课、发送自定义事件(下)

一.自定义事件对象 1.Qt可以自定义新的事件类 (1).自定义的事件类必须继承自QEvent (2).自定义的事件类必须拥有全局唯一的Type值(event->type()可以获得事件的类型) (3).程序中必须提供处理自定义事件的方法 2.自定义事件类 (1).将QEvent作为父类继承 (2).指定全局唯一的Type值 3.Qt事件的Type值 (1).每个事件类都拥有全局唯一的Type值(类似于唯一的ID号) (2).自定义事件类的Type值也需要自定义 (3).自定义事件类使用QEve

利用委托自定义事件

事件,这个大家都非常熟悉的名词,代码里几乎离不开它.但是我们平时都是用现成的事件,如果满足不了我们的需求怎么办?那就只能咱自己写了,那么问题就来了,如何自定义事件呢? 在这之前,我们就必须先了解事件与委托的干系是什么,只有弄清楚事物的本质,我们才能掌握住事物的灵魂. 我们先看看最常用的一个事件:Form_Load() public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs

第44课 发送自定义事件(下)

1. 自定义事件对象 (1)自定义事件类必须继承自QEvent (2)自定义的事件类必须拥有全局唯一的Type值 (3)程序中必须提供处理自定义事件对象的方法 2. 自定义事件类 (1)将QEvent作为父类继承 (2)指定全局唯一的Type值 class StringEvent: public QEvent { public: //提供全局唯一的Type值 static const Type TYPE = static_cast<Type>(QEvent::User + 0xFF); //.

CustomEvent自定义事件

javascript与HTML之间的交互是通过事件来实现的.事件,就是文档或浏览器窗口发生的一些特定的交互瞬间.通常大家都会认为事件是在用户与浏览器进行交互的时候触发的,其实通过javascript我们可以在任何时刻触发特定的事件,并且这些事件与浏览器创建的事件是相同的. 通过createEvent方法,我们可以创建新的Event对象,这个方法接受一个参数eventType,即想获取的Event对象的事件模板名,其值可以为HTMLEvents.MouseEvents.UIEvents以及Cust