当前位置: 首页 > Web前端 > HTML

DOM事件架构(DOMEventArchitecture)

时间:2023-04-03 00:23:14 HTML

一些概念性的事件对象(EventObject)用户触发的点击、滚动、输入等UI事件,或者自定义事件,在浏览器中会被抽象成一个事件对象(eventobject)),事件对象接口封装了事件类型(type)、目标对象(target)、当前目标(curentTarget)等属性,还定义了stopPropagation、preventDefault等方法。参考文档:https://dom.spec.whatwg.org/#...eventtarget(事件目标)事件触发的源目标对象,对应事件对象中的target属性当前事件目标(currenteventtarget)当前正在执行函数的target对象,对应event对象中的currentTarget属性,可能是事件目标。事件派发和DOM事件流触发事件后,事件对象被派发给目标对象。在调度之前,计算传播路径。传播路径对应于文档的树结构,是事件目标及其所有祖先的有序列表。.如下图所示,事件对象在传播过程中经历了三个阶段:捕获阶段(Capturephase)、目标阶段(Targetphase)、冒泡阶段(Bubblingphase):没有冒泡事件,这个过程中没有事件对象阶段在传播过程中,执行当前事件目标监听这个阶段注册的事件对象,可以通过回调函数中的stopPropagation方法停止事件对象的进一步传播。codepen示例事件监听器事件目标通过addEventListener方法注册监听器optionslistener的配置项:capture:Boolean,表示在capture阶段是否触发监听一次:Boolean,表示监听是否最多只调用一次passive:Boolean,表示监听是否永远不会调用preventDefault方法。如果侦听器调用,客户端将忽略它并抛出客户端警告。此属性可用于优化滚动性能。useCapture是否在捕获阶段注册为监听器,默认为false。addEventListener('click',callback)//默认冒泡阶段执行监听el.addEventListener('click',callback,true)//设置为捕获阶段执行监听el.addEventListener('click',callback,{capture:false})//自定义事件同上。在新规范中,提供了CustomEvent构造函数来创建自定义事件。CustomEvent继承自Event,但增加了细节属性语法event=newCustomEvent(typeArg,customEventInit);typeArg事件类型,比如原生的CustomEventInit事件初始化配置如`click`,`input`,可选字段:-`detail`:可以通过该字段配置事件相关的数据,可以在`listener`中获取-`气泡`:布尔值,表示事件是否冒泡,默认不冒泡(chrome中)-`cancelable`:Boolean,表示事件是否可以取消