美文网首页
浏览器事件流机制

浏览器事件流机制

作者: 练习时长2年半的个人练习生 | 来源:发表于2020-06-22 15:44 被阅读0次
事件捕获/事件冒泡

他们的本质是事件流的两个方向.

  • 事件捕获 window------------------>到目标节点
  • 事件冒泡 目标节点---------------->window

注意:他们传递的是事件.而不是事件绑定的函数

应用场景:可以用他们实现事件委托.

事件冒泡示例:

通过事件冒泡的原理, li被点击后.事件 传递到ul上,ul触发onclik绑定的方法. target 表示的是点击的目标对象. 让后,改变target对象实现事件委托.
好处就是:减少了重复绑定.减少了遍历带来的性能损耗.

<body>
 <ul id="div1">

     <li >111111111111111111</li>
     <li >222222222222222222</li>
     <li >333333333333333333</li>
     <li >444444444444444444</li>
     <li >555555555555555555</li>
 </ul>
</body>
//html代码
<script>
 var div1 = document.getElementById("div1");
 var li = document.getElementsByTagName('li')

  div1.onclick = function (event) { 
     console.log('father')
     if(event.target.nodeName=='LI')  {
         event.target.style.color = 'red'
     }
  };
 
  Array.prototype.forEach.call(li,(item)=>{
    //  item.onclick = e => e.stopPropagation()
  })

addEventListener 的第三个参数控制 浏览器在捕获阶段执行,还是冒泡阶段执行.. true为捕获 false为冒泡.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>事件捕获</title>
    <style type="text/css">
        #ul {
            width: 300px;
            height: 300px;
            border: hotpink 3px solid;
        }
    </style>
</head>

<body>
    <div id="outer" style="width: 300px;height: 300px;background:black;">

        <div id="middle"  style="width: 200px;height: 200px;background:blue;">

            <div id="inner"  style="width: 100px;height: 100px;background:red;"></div>
        </div>
    </div>
</body>
<script>
    var outer = document.getElementById("outer");
    var middle = document.getElementById('middle')
    var inner = document.getElementById('inner')
  

    outer.addEventListener('click', function () {
        console.log('爷爷')
    }, true)
    middle.addEventListener('click', function () {
        console.log('父亲')
    }, true)
    inner.addEventListener('click', function () {
        console.log('孩子')
    }, true)

    //点击孙子  执行结果. 爷爷/父亲/孩子
</script>

</html>

补充:

e.stopPropagation();可以组织事件冒泡
e.preventDefault() 可以阻止浏览器默认行为.比如,让a标签取消默认的跳转功能.

event.currentTarget 事件响应节点对象.
event.target 事件触发节点对象.

相关文章

  • JavaScript的事件机制详解

    【js事件详解】js事件封装函数,js跨浏览器事件处理机制 一、事件流 事件流描述的是从页面中接受事件的顺序。IE...

  • 浏览器事件流机制

    事件捕获/事件冒泡 他们的本质是事件流的两个方向. 事件捕获 window------------------...

  • 浏览器事件机制

    浏览器事件机制(即冒泡和捕获,也称为事件流) 基础知识 操作系统最先知道用户点击了鼠标,浏览器次之 child 被...

  • DOM事件流

    DOM事件流 事件冒泡:浏览器的冒泡机制,当我们触发了元素的某个事件之后,它会首先执行,绑定在这个事件的函数,然后...

  • --

    react事件机制 react基于浏览器原生事件机制,封装了一套自己的事件机制,包括事件注册、事件合成、冒泡和捕获...

  • 11-3答辩

    1什么是事件流 事件传播的顺序对应浏览器的两种事件流模型:捕获型事件流和冒泡型事件流。冒泡型事件流:事件的传播是从...

  • 注册登录和事件

    1. 解释以下概念:事件传播机制、阻止传播、取消默认事件、事件代理。 事件传播机制: DOM2级事件规定的事件流...

  • JavaScript 异步编程的几个方法

    原文地址基于浏览器事件轮回机制(以及nodejs中的事件轮询机制),JavaScript常常会运行在异步环境中。而...

  • 事件

    一、事件流,三种事件流。事件即用户或浏览器自身执行的某种动作。1.事件冒泡 IE中的事件流click事件由近即远 ...

  • 阻止浏览器事件冒泡

    不同的浏览器对事件的解析机制不同,所以就会触发不同的事件,影响我们操作,如何取解决浏览器事件冒泡 ,所谓的事件冒泡...

网友评论

      本文标题:浏览器事件流机制

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