JS进阶DAY3|事件(三)事件委托

news2024/12/12 21:07:10

目录

一、事件委托

1.1 概念

1.2 代码示例

二、tab栏切换案例


一、事件委托

1.1 概念

事件委托是一种在JavaScript中常用的技术,它利用了DOM事件冒泡的原理。事件冒泡是指当在DOM树中较低层次的元素上发生事件时,这个事件会向上冒泡到更高层次的元素,直到文档的根元素。事件委托通过在父元素上设置一个事件监听器来处理所有子元素的事件,无论这些子元素是静态的还是动态添加的。

想象一下,你是一个大型图书馆的管理员,而你的任务是响应读者的请求。图书馆有很多书架(DOM中的子元素),每个书架上都摆满了书籍。读者可能会在任何书架前提出请求,比如需要某本书或者帮助,你有一下两种解决方法:

  1. 单独响应:如果你为每个书架安排一个工作人员,那么每当有读者提出请求时,相应的工作人员就需要响应。这就像是为DOM中的每个子元素单独绑定事件监听器。这样做的缺点是,如果图书馆有很多书架,你就需要很多工作人员,这不仅成本高,而且难以管理。
  2. 事件委托:相反,你可以在图书馆的入口处设置一个信息台,并安排一个接待员。这个接待员(事件监听器)会注意到任何读者的请求,并根据请求的来源(哪个书架)来提供帮助。这就像是在父元素(图书馆)上设置一个事件监听器来处理所有子元素(书架)的事件。

1.2 代码示例

在JavaScript中,这个“信息台”对应于DOM中的父元素,比如一个 <ul> 标签,它包含了多个 <li> 子元素。

事件监听器作为接待员:这个“接待员”对应于事件监听器,它被附加到父元素上,而不是每个子元素上。

事件冒泡作为请求信号:当读者(子元素)提出请求(事件)时,这个请求会像事件冒泡一样,从子元素传递到父元素,直到到达信息台(父元素的事件监听器)。

区分请求来源:在事件处理程序中,通过 event.target (事件的实际目标),接待员(事件监听器)可以确定是哪个读者(子元素)发出的请求,从而提供相应的服务。

// 父元素(图书馆)上的事件监听器(接待员)

const library = document.getElementById('library');



library.addEventListener('click', function(e) {

  // 检查请求是否来自读者(<li>元素)

  if (e.target.tagName === 'LI') {

    // 根据请求的来源提供帮助

    console.log('Reader at bookshelf ' + e.target.textContent + ' needs assistance.');

  }

});

library 是父元素(图书馆), e.target 是实际触发事件的元素(读者所在的书架)。通过在父元素上设置一个事件监听器,我们可以处理所有子元素的事件,就像接待员可以响应所有读者的请求一样。这样,无论何时有新的“书架”( <li> 元素)加入“图书馆”( <ul> 元素),我们都不需要额外的“工作人员”(不需要为每个新元素绑定事件监听器)。这就是事件委托的力量和便利性。

了解了基本的用法后让我们来做一个简单的tab栏切换小案例吧~

二、tab栏切换案例

// 查询页面上class为'tab-nav'的元素内部的ul元素,并将其存储在变量`ul`中。
const ul = document.querySelector('.tab-nav ul');

// 为ul元素添加一个点击事件监听器。
ul.addEventListener('click', function(e){
    // 如果被点击的元素(e.target)的tagName是'A',即点击的是<a>标签。
    if (e.target.tagName == 'A'){
        // 首先,移除当前活跃(active)状态的<a>标签的'active'类。
        document.querySelector('.tab-nav .active').classList.remove('active');
        
        // 给被点击的<a>标签添加'active'类,标记为当前活跃状态。
        e.target.classList.add('active');
        
        // 获取被点击的<a>标签的data-id属性值,并转换为整数。
        const i = +e.target.dataset.id;
        
        // 移除当前活跃状态的tab内容区域的'active'类。
        document.querySelector('.tab-content .active').classList.remove('active');
        
        // 根据被点击的<a>标签的data-id属性值,找到对应的tab内容区域,并添加'active'类。
        // `.item:nth-child(${i + 1})`是一个CSS选择器,用于选择第i+1个.item元素。
        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active');
    }
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2258425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小白如何学习看懂CAD图纸?

首先&#xff0c;你需要了解CAD图纸的基本构成&#xff0c;包括图例、尺寸标注、比例等等。接着&#xff0c;你可以通过一些专业的书籍、在线课程或视频教程来逐步学习如何识别和理解这些元素。但建议不要学的太复杂了。 掌握基本概念&#xff1a; 坐标系&#xff1a;了解CAD…

让PPT不再“难搞”:智能工具如何改变办公体验

PPT的世界是一场属于设计感与逻辑力的双重较量。那些字体配色的小心思&#xff0c;排版设计的大考验&#xff0c;无不让人抓耳挠腮。然而&#xff0c;科技的加持让这一切正悄然改变。比如&#xff0c;随着 ai生成ppt 工具的兴起&#xff0c;许多复杂操作正被重新定义&#xff0…

大语言模型(LLM)与智能机器人的应用分析

系列文章目录 前言 近年来,大型语言模型(LLM)的集成彻底改变了机器人领域,使机器人能够以人类熟练程度进行交流、理解和推理。本文探讨了 LLM 对机器人的多方面影响,并针对在不同领域利用这些模型的关键挑战和机遇进行了研究。通过将 LLM 应用程序分类并分析核心机器人元素…

【论文速读】| AttackQA:利用微调及开源大语言模型辅助网络安全运营的数据集的开发与应用

基本信息 原文标题: AttackQA: Development and Adoption of a Dataset for Assisting Cybersecurity Operations Using Fine-Tuned and Open-Source LLMs 原文作者: Varun Badrinath Krishna 作者单位: SambaNova Systems 关键词: 网络安全、检索增强生成&#xff08;RAG&…

Android 车载虚拟化底层技术-Kernel 5.10 -Android12(multi-cards)技术实现

详细代码实现见 Android Display Graphics系列文章-汇总​​​​​​Android Display Graphics系列文章-汇总 Android Display Graphics系列文章-汇总 Android Display Graphics系列文章-汇总 本文主要包括部分&#xff1a; 一、Android12的Kernel 5.10版本 1.1 Kernel 5…

lqb_算法

1.蓝桥杯2024年第十五届决赛真题- 蚂蚁开会 题目描述 二维平面上有 n 只蚂蚁&#xff0c;每只蚂蚁有一条线段作为活动范围&#xff0c;第 i 只蚂蚁的活动范围的两个端点为 (uix, uiy),(vix, viy)。现在蚂蚁们考虑在这些线段的交点处设置会议中心。为了尽可能节省经费&#xf…

【银河麒麟高级服务器操作系统】修改容器中journal服务日志存储位置无效—分析及解决方案

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 服务器环境以及配置 【机型】 整机类型/架构&am…

springboot422甘肃旅游服务平台代码-(论文+源码)_kaic

摘 要 使用旧方法对甘肃旅游服务平台的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在甘肃旅游服务平台的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的…

决策曲线分析(DCA)中平均净阈值用于评价模型算法(R自定义函数)

决策曲线分析&#xff08;DCA&#xff09;中平均净阈值用于评价模型算法 DCA分析虽然不强调用来评价模型算法或者变量组合的优劣&#xff0c;但是实际应用过程中感觉DCA曲线的走势和模型的效能具有良好的一致性&#xff0c;其实这种一致性也可以找到内在的联系&#xff0c;比如…

短信验证码burp姿势

首先声明&#xff0c;本文仅仅作为学习使用&#xff0c;因个人原因导致的后果&#xff0c;皆有个人承担&#xff0c;本人没有任何责任。 在之前的burp学习中&#xff0c;我们学习了图片验证码的突破&#xff0c;但是现实中还有很多短信验证码&#xff0c;在此我介绍几种短信验…

机器学习:全面学习路径指南

摘要&#xff1a; 本文精心规划了一条从入门到精通机器学习的学习路线&#xff0c;详细涵盖了基础理论构建、核心技术栈掌握、主流算法学习、实践项目锻炼以及前沿领域探索等多个关键阶段。通过逐步深入各个层面&#xff0c;介绍必备的数学知识、编程工具、经典与现代机器学习算…

聚类及Python下实现 K-means 算法

聚类 聚类是无监督学习中的一种重要方法&#xff0c;旨在将数据集中相似的数据对象划分到同一个簇中&#xff0c;使得不同簇之间的数据对象差异尽可能大。在大数据环境下&#xff0c;聚类可以帮助挖掘数据中的隐藏结构和模式&#xff0c;应用场景十分广泛&#xff0c;比如在客…

【Qt在线安装器】不能下载Qt5

qt在线下载不显示以前的版本时&#xff1a; 勾选”Archive“&#xff0c;点击”筛选“ 然后就会显示出QT5的版本&#xff0c; 按流程下载即可

html|本地实现浏览器m3u8播放器,告别网络视频卡顿

前言 网络上经常是以m3u8文件传输视频流的 &#xff0c;但是有时网络慢往往导致视频播放卡顿。于是我在想能不能先下载然后再播放呢&#xff1f;于是尝试下载然后实现本地播放m3u8视频。 正文 1.找到网络视频流的m3u8连接 一般在浏览器按F12就可以看到有请求视频流的连接。 …

[leetcode100] 101. 对称二叉树

https://leetcode.cn/problems/symmetric-tree/description/?envTypestudy-plan-v2&envIdtop-100-liked 心血来潮&#xff0c;突然感觉很久没做leetcode&#xff0c;刷一题。 看到“简单”&#xff0c;哦吼&#xff0c;应该很快吧。 结果真是《简单》 题目描述 给你一个…

技术速递|dotnet scaffold – .NET 的下一代内容创建

作者&#xff1a;Sayed Ibrahim Hashimi - 首席项目经理 排版&#xff1a;Alan Wang Visual Studio 中为 ASP.NET Core 项目搭建脚手架是一项长期特性&#xff0c;是在 ASP.NET Core 发布后不久添加的。多年来&#xff0c;我们一直支持从命令行搭建脚手架。根据从命令行操作中获…

经纬度解析到省市区【开源】

现在业务中有需要解析经纬度到省市区。 按理说可以直接使用高德&#xff0c;百度之类的。 但是老板太抠。于是去找开源项目。找了一圈&#xff0c;数据都太老了&#xff0c;而且有时候编码还不匹配。 所以诞生了这个项目&#xff0c;提供完整的一套省市区编码和定位反解析。…

打开分页机制

分页机制的表 一般线性地址和物理地址大小不会一样&#xff0c;物理内存空间不够时候&#xff0c;涉及和外部磁盘的swap过程&#xff0c;但是这个系统不涉及 CR3放的是页表的起始地址 代码部分 PDE:4MB page 一级页表的页块大小为4MB 然后是这个二级页表 PTE:4KB page 关于什…

EasyPlayer.js播放器如何在iOS上实现低延时直播?

随着流媒体技术的迅速发展&#xff0c;H5流媒体播放器已成为现代网络视频播放的重要工具。其中&#xff0c;EasyPlayer.js播放器作为一款功能强大的H5播放器&#xff0c;凭借其全面的协议支持、多种解码方式以及跨平台兼容性&#xff0c;赢得了广泛的关注和应用。 那么要在iOS上…

多模态大语言模型 MLLM 部署微调实践

1 MLLM 1.1 什么是 MLLM 多模态大语言模型&#xff08;MultimodalLargeLanguageModel&#xff09;是指能够处理和融合多种不同类型数据&#xff08;如文本、图像、音频、视频等&#xff09;的大型人工智能模型。这些模型通常基于深度学习技术&#xff0c;能够理解和生成多种模…