事件流、事件委托/事件代理


事件流

JS 与 html 页面的交互是通过 DOM 事件实现的,那么什么是事件流?其实就是指页面接收事件的顺序;、
DOM 事件流包括三个阶段:事件捕获阶段,处于目标阶段,事件冒泡阶段;
用意下代码为简单示例说明:




    
    Event


    


事件捕获

事件触发后,不具体的节点应该更早接收到事件,最具体的节点应该最后接收到事件,其用意在于在事件到达预定目标之前捕获它;
在示例页面中,当点击

使用普通方式点击每一个做不同的操作,至少需要4次DOM操作,用事件委托就可以只用一次DOM操作就能实现所有效果;
适合使用事件委托的事件: clickmousedownmouseupkeydownkeyupkeypress
注意: mouseovermouseout 事件虽然也冒泡,但是处理它们的时候需要计算元素位置,非常不好把控,focusblur 之类本身就没用冒泡的特性,所以不能使用事件委托;

总结

事件流是页面接收事件的顺序:捕获阶段 -> 目标阶段 -> 冒泡阶段;
事件委托又名事件代理,利用事件冒泡,只指定一个事件处理程序,就可以管理某种类型的所有事件;极大程度上减少与 DOM 的交互次数,提高整体运行性能;