美文网首页
JS的捕获、绑定和冒泡

JS的捕获、绑定和冒泡

作者: yzw12138 | 来源:发表于2018-06-30 22:28 被阅读0次

    JS的addEventListener方法

    • addEventListener方法是将监听器绑定到某个Document元素上,当触发指定事件时,执行指定的回调函数,只要当前Document未被销毁掉,该事件就会被调用,如:
    <div class="list-bottom load-more">加载更多</div>
    
    document.querySelector('.load-more').addEventListener('click', function(e) {
        console.log('加载更多');
    }
    // 此时点击div会触发点击事件
    
    // 当div去掉“load-more”时
    <div class="list-bottom">加载更多</div>
    
    // 此时点击div仍然会触发点击事件,可以通过判断某个class是否存在来阻止事件继续执行,即触发该事件但并不执行操作
     document.querySelector('.load-more').addEventListener('click', function(e) {
         if (! this.classList.contains("load-more")) return;
         console.log('加载更多');
    }
    
    • addEventListener的参数:dom.addEventListener(type, listener, useCapture );
      type:事件触发的类型;
      listener:当监听的事件被触发后所执行的操作;
      useCapture :可选参数,Boolean类型,默认为false.在一个DOM树中,最外面的根元素注册了listener,当DOM树中的某一子元素触发该事件时,是否会触发其父节点绑定的事件.

    捕获、绑定和冒泡

    捕获:多层DOM树,鼠标触发DOM事件时,浏览器会从根节点开始向内进行事件传播,如果父元素绑定了相同事件则会先触发父元素事件.

    <html>
        <body>
            <div id="d1">parent
                <div id="d2">child</div>
            </div>
        </body>
        <script>
            document.body.addEventListener('click', function(e) {
                console.log('body-cap');
            }, true);
            document.querySelector('#d1').addEventListener('click', function(e) {
                console.log('parent-cap');
            }, true);
            document.querySelector('#d2').addEventListener('click', function(e) {
                console.log('child-cap');
            }, true);
        </script>
    </html>
    // 输出结果
    body-cap
    parent-cap
    child-cap
    

    冒泡:与传播恰好相反,由触发事件节点向根节点传播事件.

        <body>
            <div id="d1">parent
                <div id="d2">child</div>
            </div>
        </body>
        <script>
            document.body.addEventListener('click', function(e) {
                console.log('body');
            });
            document.querySelector('#d1').addEventListener('click', function(e) {
                console.log('parent');
            });
            document.querySelector('#d2').addEventListener('click', function(e) {
                console.log('child');
            });
        </script>
    </html>
    // 输出结果
    child
    parent
    body
    

    相关文章

      网友评论

          本文标题:JS的捕获、绑定和冒泡

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