11.事件委托

1.事件委托是利用事件流的特征解决一些开发需求的知识技巧

➢优点:减少注册次数,可以提高程序性能

➢原理:事件委托其实是利用事件冒泡的特点

➢给父元素注册事件,当我们触发子元素的时候,会冒泡到父元素身上,从而触发父元素的事件

➢实现:
事件对象.target.tagName 可以获得真正触发事件的元素

【示例代码】

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <p>我不需要变色</p>
    </ul>
    <script>
        // 点击某个li 当前li文字变为红色
        // 委托给父级
        const ul = document.querySelector('ul')
        ul.addEventListener('click', function (e) {
            // e.target 是我们点击的那个对象
            // 但要求只有点击li时才变红色
            if (e.target.tagName === 'LI') {  // 注意标签名大写
                e.target.style.color = 'red'
            }
        })
    </script>
</body>

</html>

2.案例-tab栏切换改造

需求:优化程序,将tab切换案例改为事件委托写法

【部分代码】

html 复制代码
 <script>
    // 获取父元素
    const ul = document.querySelector('.tab-nav ul')
    // 给父元素添加鼠标经过事件
    ul.addEventListener('click', function (e) {
      // console.log(e.target)
      // 只有点击了 a 才会进行 添加、删除类
      if (e.target.tagName === 'A') {
        document.querySelector('.tab-nav .active').classList.remove('active')
        e.target.classList.add('active')

        // 下部大盒子模块
        console.log(e.target.dataset.id) //得到的是字符串类型
        const i = +e.target.dataset.id
        document.querySelector('.tab-content .active').classList.remove('active')
        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')
      }
    })
</script>
相关推荐
陈_杨2 分钟前
鸿蒙APP开发-带你走进胶片录的拍摄记录管理
前端·javascript
陈_杨8 分钟前
鸿蒙APP开发-带你走进胶片录的相机控制
前端·javascript
陈_杨10 分钟前
鸿蒙APP开发-带你走进节流战的Canvas图表
前端·javascript
陈_杨11 分钟前
鸿蒙APP开发-带你走进光绘记的拍摄规划
前端·javascript
小小de风呀14 分钟前
de风——【从零开始学C++】(十一):list的基本使用和模拟实现
开发语言·c++·list
陈_杨16 分钟前
鸿蒙APP开发-带你走进光绘记的长曝光模拟
前端·javascript
陈_杨17 分钟前
鸿蒙APP开发-带你走进节拍器的声音怎么这么准
前端·javascript
搬砖的阿wei17 分钟前
Pinia 与 Vuex 区别
前端·vue.js
KaMeidebaby23 分钟前
卡梅德生物技术快报|原核表达系统工艺优化:包涵体重折叠 + 分子筛纯化实现功能 RBD 高效制备,附全参数配置
前端·人工智能·算法·数据挖掘·数据分析
三行数学32 分钟前
Matlab之父克利夫·莫勒尔逝世
开发语言·matlab