Web API事件对象 | 青训营笔记

78 阅读1分钟

这是我参与「第四届青训营 」笔记创作活动的第30天

事件对象

1.事件对象是什么
也是个对象,这个对象里有事件触发时的相关信息
例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息
2. 如何获取
在事件绑定的回调函数的第一个参数就是事件对象
一般命名为event、ev、e

     <button>点击</button>
     <script>
       let btn = document.querySelector('button')
       btn.addEventListener('mouseenter', function (e) {
           console.log(e)
       })
     </script>

事件流

事件流指的是事件完整执行过程中的流动路径。
说明:假设页面里有个div,当触发事件时,会经历两个阶段,分别是捕获阶段、冒泡阶段。
简单来说:捕获阶段是 从父到子;冒泡阶段是从子到父。

事件冒泡

当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发,这一过程被称为事件冒泡
简单理解:当一个元素触发事件后,会依次向上调用所有父级元素的同名事件

    <div class="father">
       <div class="son"></div>
   </div>
   <script>
       // 事件监听注册(L2)
       let fa = document.querySelector('.father')
       let son = document.querySelector('.son')
       fa.addEventListener('click', function () {
           alert('我是爸爸')
       }, true)
       // 在旧版本的 DOM 的规定中, addEventListener()的第三个参数是一个布尔值表示是否在捕获阶段调用事件处理程序。
       // 若传入false代表冒泡阶段触发,默认就是false
       son.addEventListener('click', function () {
           alert('我是儿子')
       }, true)
       document.addEventListener('click', function () {
           alert('我是爷爷')
       }, true)

       // 传统on注册(L0): btn.onclick = function() {}  若是用 L0 事件监听,则只有冒泡阶段,没有捕获
   </script>

事件委托

具体案例

利用事件流的特征解决一些开发需求的知识技巧, 给父元素添加事件,子元素可以触发

<ul>
        <li>我是第1个小li</li>
        <li>我是第2个小li</li>
        <li>我是第3个小li</li>
        <li>我是第4个小li</li>
        <li>我是第5个小li</li>
    </ul>
    <script>
        // 不要每个小li注册事件了  而是把事件委托给他的爸爸 
        // 事件委托是给父级添加事件 而不是孩子添加事件
        let ul = document.querySelector('ul')
        ul.addEventListener('click', function (e) {
            // alert('我点击了')
            // 得到当前的元素
            // console.log(e.target)
            e.target.style.color = 'red'
        })
    </script>