美文网首页
5.事件流

5.事件流

作者: 素弥 | 来源:发表于2016-10-13 23:51 被阅读27次

    如果有一个事件,当这个事件发生后,就会开始执行一个流程,分为三个阶段,捕获、目标、冒泡,这个流程称之为事件流

    捕获阶段

    在事件发生时,从最外层向目标元素寻找的一个过程
    window → document → html → body → ... → 目标元素的父级 → 目标元素

    目标阶段

    找到目标元素之后,如果该元素身上有事件处理函数,则它会执行事件处理函数(这里不分冒泡和捕获,只分代码的先后顺序,谁在前,就先执行谁)

    btn.addEventListener('click',function(){
        console.log('捕获阶段');
    },true);
    btn.addEventListener('click',function(){
        console.log('冒泡阶段');
    },false);
    //这段代码在点击以后,控制台输出的顺序是 1.'捕获阶段' 2.'冒泡阶段'
    
    btn.addEventListener('click',function(){
        console.log('冒泡阶段');
    },false);
    btn.addEventListener('click',function(){
        console.log('捕获阶段');
    },true);
    //这段代码在点击以后,控制台输出的顺序是 1.'冒泡阶段' 2.'捕获阶段'
    

    冒泡阶段

    从目标元素的上一层开始往外层寻找的一个过程
    目标元素 → 目标元素的父级 → ... → body → html → document →window

    注意

    不论是捕获阶段还是冒泡阶段,在寻找目标元素还有向外返回的过程中,所遇到的每一个元素,如果它们身上有相同事件,那么它们的事件处理函数都会被调用

    即如果通过click事件触发了事件流的形成,那么在捕获或者冒泡阶段(除去目标元素),碰到的任何具有click事件的元素,它们身上的事件处理函数都会执行
    但是这里会存在一个执行阶段的问题:
    碰到的具有click事件的元素,如果它的click事件是由addEventListener( , ,false)或者on来添加的,那么则会在冒泡的过程中,执行这个函数
    碰到的具有click事件的元素,如果它的click事件是由addEventListener( , ,true)来添加的,那么则会在捕获的过程中,执行这个函数

    相关文章

      网友评论

          本文标题:5.事件流

          本文链接:https://www.haomeiwen.com/subject/vgowyttx.html