事件委托的原理及优点分析
2018-03-08 22:28
260 查看
事件委托又称事件代理,下面将要将要简要叙述一下这种方法的原理及优点。
假使我们需要对3个li元素添加点击事件:
传统的方法是分别给每个li元素绑定click事件。
假使li元素特别多呢?可能你已经想到这样一个一个添加click事件是相当麻烦的,那么是否有优化方法呢?
当然,我们只需要在ul元素上添加一个事件处理程序。这种在DOM树中尽量最高的层次上添加事件处理程序的方式便是事件委托,主要用于解决“事件处理程序过多”问题。
很简单,由于所有li元素都是ul元素的子节点,故他们的事件会冒泡,无论点击哪个li元素,实际上都相当于点击了ul元素。
现在产生了另一个问题:ul元素如何知道是在哪个li元素上点击的呢?
我们很容易想到,在ul的事件处理程序中检测事件对象的target属性,就可以得到真正点击的目标元素。
减少了内存
4000
占用,性能更好;
在访问DOM方面,也使得DOM访问次数减少。试想一下,如果要为许多的DOM元素绑定事件,自然需要多次访问DOM元素,设置事件处理程序所需时间更长,整个页面就绪需要的时间越多。因此第二个优点是:
设置事件处理程序所需时间更少,加快了整个页面的交互就绪时间。
假使我们将事件处理程序绑定到document对象上,只要可单击的元素呈现在页面上,就可以立即具备适当的功能。即还会有一个额外的优点:
document很快就可以访问,而且可以在页面生命周期的任何时点添加事件处理程序,而不用等待其他事件完成如DOMContentLoaded、load事件。
一、什么是事件委托?
我们看下面的例子:<ul id='myLinks'> <li id='goSomewhere'>Go Somewhere</li> <li id='doSomething'>Do Something</li> <li id='sayHi'>Say hi</li> </ul>
假使我们需要对3个li元素添加点击事件:
传统的方法是分别给每个li元素绑定click事件。
假使li元素特别多呢?可能你已经想到这样一个一个添加click事件是相当麻烦的,那么是否有优化方法呢?
当然,我们只需要在ul元素上添加一个事件处理程序。这种在DOM树中尽量最高的层次上添加事件处理程序的方式便是事件委托,主要用于解决“事件处理程序过多”问题。
二、事件委托如何工作?
我们现在的疑问是:ul元素如何知道li元素点击了呢?很简单,由于所有li元素都是ul元素的子节点,故他们的事件会冒泡,无论点击哪个li元素,实际上都相当于点击了ul元素。
现在产生了另一个问题:ul元素如何知道是在哪个li元素上点击的呢?
我们很容易想到,在ul的事件处理程序中检测事件对象的target属性,就可以得到真正点击的目标元素。
三、事件委托的优点
首先,我们看到添加的事件处理程序减少,可以只有一个事件处理程序。由于每个函数都是对象,对象会占用内存,内存的占用关系到性能。因此第一个优点是:减少了内存
4000
占用,性能更好;
在访问DOM方面,也使得DOM访问次数减少。试想一下,如果要为许多的DOM元素绑定事件,自然需要多次访问DOM元素,设置事件处理程序所需时间更长,整个页面就绪需要的时间越多。因此第二个优点是:
设置事件处理程序所需时间更少,加快了整个页面的交互就绪时间。
假使我们将事件处理程序绑定到document对象上,只要可单击的元素呈现在页面上,就可以立即具备适当的功能。即还会有一个额外的优点:
document很快就可以访问,而且可以在页面生命周期的任何时点添加事件处理程序,而不用等待其他事件完成如DOMContentLoaded、load事件。
相关文章推荐
- JavaScript事件委托原理与用法实例分析
- 关于javascript的事件委托delegate的原理分析
- JavaScript事件委托的技术原理
- JavaScript事件委托技术实例分析
- js的事件的三个阶段,事件委托的原理
- 输入事件ANR原理分析
- 第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例
- 事件委托(事件代理)的原理以及优缺点是什么?
- [置顶] Android开发知识(八):Android事件处理机制:事件分发、传递、拦截、处理机制的原理分析(中)
- 事件委托在哪些场景中使用,该如何使用,及其实现原理?
- jQuery-1.9.1源码分析系列(十) 事件系统——事件委托
- Android Touch事件原理加实例分析
- Guava 源码分析(Cache 原理 对象引用、事件回调)
- 事件,委托的功能和原理
- 事件委托原理
- Netty4 SEDA 事件驱动原理分析
- JavaScript事件委托的技术原理
- Duilib中CEventSource及CDelegate(事件委托)的简单分析
- Android Touch事件传递原理分析
- JavaScript的事件代理和委托实例分析