js事件流

109 阅读1分钟

原生js的事件绑定方式有几种?

估计大家所认为的三种大概是如下三种:

// 第一种:直接绑定在dom上

click
// 第二种,使用onclick document.getElementById("xxx").onclick = function(){ }; // 第三种:使用推荐的标准模式 document.getElementById("xxx").addEventListener("click",function(e){ });

标准事件流

Dom标准事件流的触发的先后顺序为:先捕获再冒泡。即当触发

dom事件时,会先进行事件捕获,捕获到事件源之后通过事件传播进行事件冒泡。

在我们平常用的addEventListener方法中,一般只会用到两个参数,一个是需要绑定的事件,另一个是触发事件后要执行的函数,然而addEventListener还可以传入第三个参数:

element.addEventListener(event, function, useCapture);

第三个参数默认值是false,表示在事件冒泡阶段调用事件处理函数;如果参数为true,则表示在事件捕获阶段调用处理函数。如果不写第三个参数则默认在事件冒泡阶段调用事件处理函数。

事件委托(事件代理)

就是利用事件冒泡,把子元素的事件都绑定到父元素上(如果子元素阻止了事件冒泡,那么委托就无法实现)。

优点:

1.替代循环绑定事件的操作,减少内存消耗,提高性能。比如:

在table上代理所有td的click事件。

在ul上代理所有li的click事件。

2.简化了dom节点更新时,相应事件的更新。比如:

不用在新添加的li上绑定click事件。

当删除某个li时,不用移解绑上面的click事件。

自定义事件

如何创建?

blog.csdn.net/jyb123/arti…

www.jianshu.com/p/5f9027722…

www.cnblogs.com/xiaoan0705/…