事件流详解

作者: 命运齿轮1 | 来源:发表于2018-04-14 08:48 被阅读0次

    title: 事件流

    • JS事件流最早要从IE和网景公司的浏览器大战说起,IE提出的是冒泡流,而网景提出的是捕获流,后来在W3C组织的统一之下,JS支持了冒泡流和捕获流,但是目前低版本的IE浏览器还是只能支持冒泡流(IE6,IE7,IE8均只支持冒泡流),所以为了能够兼容更多的浏览器,建议大家使用冒泡流。

    事件作用范围

        //css
    
        <style type="text/css">
            #wrap {
              width: 200px;
              height: 200px;
              background: orange;
            }
            #content {
              position: relative;
              top: 50px;
              left: 50px;
              width: 100px;
              height: 100px;
              background: #eeddff;
            }
            #inner {
              position: relative;
              top: 25px;
              left:25px;
              width: 50px;
              height: 50px;
              background: #44ddff;
            }
        </style>
    
    
        //html
        <div id="wrap">
            <div id="content">
                <div id="inner"></div>
            </div>
        </div>
    
        //js
        <script>
            var wrap = document.getElementById('wrap');
            wrap.addEventListener('click',function(){
                alert('789');
            },false);
        </script>
    
        //当点击warp块(包括被子元素的部分)任何一部分时,都会弹出789。这是相当于3个click作用在其上。
    
    试验

    css html同上,

        //script
        var wrap = document.getElementById('wrap');
        var content = document.getElementById('content');
        var inner = document.getElementById('inner');
    
        wrap.addEventListener('click',function(){
            alert('789');
        },false);
        content.addEventListener('click',function(){
            alert('456');
        },false);
        inner.addEventListener('click',function(){
            alert('123');
        },false);
    
    

    这样执行的话,就会先弹出123,然后弹出456,最后弹出789。

    DOM事件流

    css html 同上

            var wrap = document.getElementById('wrap');
            var content = document.getElementById('content');
            var inner = document.getElementById('inner');
            wrap.addEventListener('click',function(){
              alert('wrap');
            },true);
            content.addEventListener('click',function(){
              alert('content');
            },true);
            inner.addEventListener('click',function(){
              alert('inner');
            },true);
    
            wrap.addEventListener('click',function(){
              alert('wrap11');
            },false);
            content.addEventListener('click',function(){
              alert('content11');
            },false);
            inner.addEventListener('click',function(){
              alert('inner11');
            },false);
    
    

    这样点击中心执行 会先弹出wrap 在弹出content 后弹出inner 然后弹出inner11,content11,wrap11。
    按上面的例子为,先调用冒泡阶段的事件处理程序,再调用捕获阶段的事件处理程序。

    相关文章

      网友评论

        本文标题:事件流详解

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