事件委托
最编程
2024-08-07 14:58:13
...
事件委托也称事件代理,在jQuery里面就称为事件委派。
事件委托就是把事件监听放在祖先元素(如父元素、爷爷元素)上。
由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件。这种方法叫做事件的代理。
事件委托的原理
不是给每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利事件用冒泡的原理影响设置每个子节点
事件委托作用
绑定事件越多,浏览器内存占用越大,严重影响性能
只操作一次DOM,提高程序的性能
假设有一个列表,列表之中有100个列表项,我们需要在点击每个列表项的时候响应一个事件。以前的做法就是利用for循环给每个列表项添加点击事件,这样对于内存的消耗非常大,性能差。因此借助事件代理,提高程序性能。
<ul>
<li>dianwo1</li>
<li>dianwo2</li>
<li>dianwo3</li>
...
<li>dianwo100</li>
</ul>
借助事件代理的方法:不需要再每个li项里面添加点击事件,只需要给父容器ul绑定方法即可,不管点击哪个li项,都会根据冒泡传播的传递机制,触发点击事件,执行对应的处理方法,根据事件源e.target,我们可以知道点击的是谁,从而完成不同的事。
事件委托实现
<ul>
<li>dianwo</li>
<li>dianwo</li>
<li>dianwo</li>
<li>dianwo</li>
<li>dianwo</li>
</ul>
let ul=document.querySelector('ul')
ul.addEventListener('click',function(e){
e.target.style.color='pink'
//e.target 得到点击的那个对象
})
target 与 currentTarget 的区别:
- e.target: 用户操作的元素
- e.currentTarget: 程序员监听的元素
- 比如上例中,e.target 就是 li ,e.currentTarget 就是 ul
以上代码中,并没有给每一个元素绑定事件,只是给父节点ul绑定事件,但是点击每一个li时,可以变换其样式。
事件委托的优点:
1.减少事件注册,节省内存。
- 在table上代理所有td的click事件。
- 在ul上代理所有li的click事件。
2.可以监听动态生成的元素。
- 不用在新添加的li上绑定click事件。
- 当删除某个li时,不用移解绑上面的click事件。
推荐阅读
-
App:templatesNuxt.js 应用程序中生成的事件钩子详解
-
如何在 uniapp 上绑定全局事件总线(引入弹出窗口等自定义全局组件)
-
详细介绍 Nuxt.js 应用程序中的应用程序:解析事件钩子
-
服务器发送事件 (SSE) GPT 场景实施 - 服务器端(后端)
-
模块:Nuxt.js 应用程序中的事件钩子前详解
-
OpenCV 高级图形用户界面(4)获取鼠标滚轮事件增量值的函数 getMouseWheelDelta 的使用--代码示例
-
为 unity 中指定的动画片段添加动画事件,播放动画并获取片段的持续时间。-示例 1
-
JQuery 基本介绍和用法-JQuery 事件
-
Qt --- 系统相关 --- 事件、文件操作、多线程编程、网络编程、多媒体
-
1.随机事件和概率