JS事件流

事件流介绍

  • js操作css称为脚本化的css,js与html交互通过事件完成
  • 事件就是文档或浏览器窗口中发生一些特定的交互瞬间
  • 事件流(事件传播)描述的是从页面中接收事件的顺序

事件流的历史

  • 如果单机了某个按钮,他们认为单机事件不仅仅发生在按钮上,甚至是单机了整个页面
  • IE和Netscape提出完全相反的事件流
    • IE事件流是事件冒泡流
    • Netscape事件流是事件捕获流

事件流中的三个阶段

  1. 事件的捕获阶段
  2. 处于目标阶段
  3. 事件冒泡阶段
    JS事件流
<div id="box"></div>
    <script>
        var box = document.getElementById("box");
        //true 为事件捕获
        box.addEventListener(‘click‘,function(){
            box.innerHTML += ‘div\n‘;
        },true);
        document.body.addEventListener(‘click‘,function(){
            box.innerHTML += ‘body\n‘;
        },true);
        document.documentElement.addEventListener(‘click‘,function(){
            box.innerHTML += ‘html\n‘;
        },true);
        document.addEventListener(‘click‘,function(){
            box.innerHTML += ‘document\n‘;
        },true);
        window.addEventListener(‘click‘,function(){
            box.innerHTML += ‘window\n‘;
        },true);
        
        //false 为事件冒泡
        box.addEventListener(‘click‘,function(){
            box.innerHTML += ‘div\n‘;
        },false);
        document.body.addEventListener(‘click‘,function(){
            box.innerHTML += ‘body\n‘;
        },false);
        document.documentElement.addEventListener(‘click‘,function(){
            box.innerHTML += ‘html\n‘;
        },false);
        document.addEventListener(‘click‘,function(){
            box.innerHTML += ‘document\n‘;
        },false);
        window.addEventListener(‘click‘,function(){
            box.innerHTML += ‘window\n‘;
        },false);
    </script>

JS事件流

事件冒泡

  • 事件开始时由最具体的元素接受,然后逐级向上传播到较为不具体的节点(文档)
<style>
        #box{
            width: 200px;
            height: 200px;
            background-color: blueviolet;
            color: #fff;
        }
    </style>
</head>
<body>
    <div id="box"></div>
    <script>
        var box = document.getElementById("box");
        box.onclick = function(){
            box.innerHTML += `div\n`;
        }
        document.body.onclick = function(){
            box.innerHTML += `body\n`;
        }
        document.documentElement.onclick = function(){
            box.innerHTML += `html\n`;
        }
        document.onclick = function(){
            box.innerHTML += `document\n`;
        }
        window.onclick = function(){
            box.innerHTML += `window\n`;
        }
    </script>

点击box 运行截图

JS事件流

事件冒泡图解

JS事件流

注意:

IE9及以上,火狐,谷歌都是冒泡到window上

IE9以下 冒泡到document上

事件捕获

  • 由不太具体的节点更早的接收事件,而最具体的节点应该最后接收到事件。
<style>
        #box{
            width: 200px;
            height: 200px;
            background-color: blueviolet;
            color: #fff;
        }
    </style>
</head>
<body>
    <div id="box"></div>
    <script>
        var box = document.getElementById("box");
        //true 为事件捕获
        //false 为事件冒泡
        box.addEventListener(‘click‘,function(){
            box.innerHTML += ‘div\n‘;
        },true);
        document.body.addEventListener(‘click‘,function(){
            box.innerHTML += ‘body\n‘;
        },true);
        document.documentElement.addEventListener(‘click‘,function(){
            box.innerHTML += ‘html\n‘;
        },true);
        document.addEventListener(‘click‘,function(){
            box.innerHTML += ‘document\n‘;
        },true);
        window.addEventListener(‘click‘,function(){
            box.innerHTML += ‘window\n‘;
        },true);
    </script>

事件捕获 运行截图

JS事件流

JS事件流

上一篇:PHP 之读取Excel数据


下一篇:【Thinkphp+Nginx】thinkphp5.1项目修改nginx的vhost后nginx无法启动