js中的事件委托
文章类型:Javascript
发布者:hp
发布时间:2023-03-25
一:事件流
一个完整的事件流包含事件捕获阶段>事件目标阶段>事件冒泡阶段,主要分为捕获和冒泡事件流
1):捕获事件流=>从根节点开始执行,一直往子节点查找执行,直到查找执行到目标节点
2):冒泡事件流=>从目标节点开始执行,一直往父节点冒泡查找执行,直到查到到根节点
二:事件委托
(一):定义
利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件
(二):原理
利用事件冒泡,就是事件从最深的节点开始,然后逐步向上传播事件
分为三个阶段
1):捕获阶段,从window对象自上而下向目标节点传播的阶段,不具体的节点先接收事件,然后逐级向下传播,最具体的节点最后接收到事件
2):目标阶段,真正的目标节点正在处理事件的阶段,表示事件刚好传播到用户产生行为的元素上,可能是事件捕获的最后一个阶段,也可能是事件冒泡的第一个阶段
3):起泡阶段,从目标节点自下而上向window对象传播的阶段,是最具体的元素先接收事件,然后逐级向上传播,不具体的节点最后接收事件
(三):实现
<ul id="myLinks">
<li id="goSomewhere">Go somewhere</li>
<li id="doSomething">Do something</li>
<li id="sayHi">Say hi</li>
</ul>
let list = document.getElementById("myLinks");
list.addEventListener("click", (event) => { let target = event.target;});
(四):作用和优点
1):事件委托主要用来减少内存消耗,不用处理多次循环绑定
2):动态绑定事件,随时可用
3):冒泡、委托对事件连环触发带来的影响
4):替代原生JS中循环绑定事件的操作,节省时间
(五):总结
1):适合用事件委托的事件:click,mousedown,mouseup,keydown,keyup,keypress
三:事件(Event)
1):target属性在事件目标阶段,为真实操作的目标元素。
2): currentTarget属性在事件捕获、事件目标、事件冒泡这3个阶段
3):stopPropagation()函数仅会阻止事件冒泡,其他事件处理程序仍然可以调用
4):stopImmediatePropagation()函数不仅会阻止冒泡,也会阻止其他事件处理程序的调用
5):event.preventDefault()阻止默认元素行为