Skip to content

事件流

事件流

  1. 冒泡流
  2. 捕获流

定义事件流:addEventListener 的第三个参数,true 则为捕获型事件,false 则为冒泡型事件。(默认冒泡流)

事件流阶段

W3C 中定义事件的发⽣经历三个阶段:捕获阶段( capturin )、⽬标阶段 ( targetin )、冒泡阶段( bubbling

执行过程:

例如有如下 DOM 层次

html
<html>
    <body>
        <div></div>
    </body>
</html>

且触发 div 的事件,则事件触发顺序如下

阻止事件流

e.stopPropagation()

事件代理

  • 在父级判定,并判断触发的是不是想要的子级,如果是则完成相应的事件

通用的事件处理函数(用事件代理的思维)

javascript
function bindEvent (dom, type, selector, fn) {
    // 如果只有 3 个参数,则把第 3 个参数赋值给 fn
    if(fn == null){
        fn = selector;
        selector = null;
    }
    dom.addEventListener(type, (e) => {
        const target = e.target;
        if (selector) {
            if (target.matches(selector)) {
                fn.call(target, e);
            }
        } else {
            fn.call(target, e);
		}
    })
}