美文网首页
js 事件机制

js 事件机制

作者: 鹏雨燕 | 来源:发表于2020-05-19 11:37 被阅读0次

在分析react-window的源代码时react-scroll,监听dom的滚动事件取值往往都是event.currentTarget,为什么不是event.target呢?

要彻底了解这两者的区别,我们要先了解浏览器中事件传递的机制冒泡捕获

<div id="a">
    <div id="b">
      <div id="c">
        <div id="d"></div>
      </div>
    </div>
</div>

<script>
    document.getElementById('a').addEventListener('click', function(e) {
      console.log('target:' + e.target.id + '&currentTarget:' + e.currentTarget.id);
    });    
    document.getElementById('b').addEventListener('click', function(e) {
      console.log('target:' + e.target.id + '&currentTarget:' + e.currentTarget.id);
    });    
    document.getElementById('c').addEventListener('click', function(e) {
      console.log('target:' + e.target.id + '&currentTarget:' + e.currentTarget.id);
    });    
    document.getElementById('d').addEventListener('click', function(e) {
      console.log('target:' + e.target.id + '&currentTarget:' + e.currentTarget.id);
    });
</script>
捕获
冒泡

我们为一个元素绑定一个点击事件的时候,可以指定是要在捕获阶段绑定或者换在冒泡阶段绑定。 当addEventListener的第三个参数为true的时候,代表是在捕获阶段绑定,当第三个参数为false或者为空的时候,代表在冒泡阶段绑定。

在上述代码块中,先点击d

上面事件的绑定都是在冒泡阶段的,会依次输出:

target:d&currentTarget:d
target:d&currentTarget:c
target:d&currentTarget:b
target:d&currentTarget:a

从输出中我们可以看到,event.target指向引起触发事件的元素,而event.currentTarget则是事件绑定的元素,只有被点击的那个目标元素的event.target才会等于event.currentTarget。

如果我们把事件都绑定在捕获阶段,然后还是点击最里层的元素d,这时event.target还依旧会指向d,因为那是引起事件触发的元素,因为event.currentTaget指向事件绑定的元素,所以在捕获阶段,最先来到的元素是a,然后是b,接着是c,最后是d。所以输出的内容如下:

target:d&currentTarget:a
target:d&currentTarget:b
target:d&currentTarget:c
target:d&currentTarget:d

相关文章

  • 事件处理机制

    Node.js事件触发对象有哪些方法? 详细讲讲Node.js事件机制是怎样的? Node.js事件机制和Java...

  • javascript 中的事件机制

    js之事件机制 1、事件初探 1.1 js事件的概述 JavaScript事件:JavaScript是基于事件驱动...

  • 20、jQuery 事件机制

    20、jQuery 事件机制 原生js事件与jQuery事件: (1)用原生的js给div注册事件 原生js注册相...

  • 性能优化——事件代理

    了解过JS的事件机制应该知道JS的事件触发后会有一个冒泡阶段。事件代理就是利用了这个机制。 我们考虑这样一个情况 ...

  • JavaScript的事件机制详解

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

  • JS 事件(2)

    1、事件传播机制、阻止传播、取消默认事件、事件代理这些到底是什么呢? ①事件传播机制:JS事件传播包括三个阶段: ...

  • js事件机制

    一、js事件机制三个阶段:事件捕获、事件目标处理函数、事件冒泡 js中事件执行的整个过程称之为事件流,分为三个阶段...

  • JS事件机制

    事件流 事件流指从页面接收事件的顺序,分为冒泡(IE)和捕获 'DOM2级事件'规定的事件流包括三部分:捕获、处于...

  • js事件机制

    事件监听 类似 点击这个按钮 的方式,这种方式会使JS与HTML高度耦合,不利于开发和维护,不推荐使用。 DOM属...

  • js事件机制

    概念: event loop: Javascript是单线程的,所有的同步任务都会在主线程中执行。 主线程之外,还...

网友评论

      本文标题:js 事件机制

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