事件委托:是JavaScript中注册事件的常用技巧,也称事件委派、事件代理

简单理解:原本需要注册在子元素的事件委托给父元素,让父元素担当事件监听的职务

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

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

  • 给父亲注册时间,当触发子元素时,会冒泡到父元素身上,从而触发父元素事件

案例讲解:

这是一个使用事件委托实现的Tab栏切换效果。代码包含HTML、CSS样式和JavaScript交互逻辑。Tab栏包含5个导航项(精选、美食、百货、个护、预告)和对应的内容区。通过鼠标悬停事件,JavaScript动态切换active类实现内容切换效果,避免为每个导航项单独绑定事件,提高了性能。CSS样式定义了Tab栏的布局和交互状态下的样式变化。

效果图:

代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>事件委托版本tab栏切换</title><style>* {margin: 0;padding: 0;}.tab {width: 590px;height: 340px;margin: 20px;border: 1px solid #e4e4e4;}.tab-nav {width: 100%;height: 60px;line-height: 60px;display: flex;justify-content: space-between;}.tab-nav h3 {font-size: 24px;font-weight: normal;margin-left: 20px;}.tab-nav ul {list-style: none;display: flex;justify-content: flex-end;}.tab-nav ul li {margin: 0 20px;font-size: 14px;}.tab-nav ul li a {text-decoration: none;border-bottom: 2px solid transparent;color: #333;}.tab-nav ul li a.active {border-color: #e1251b;color: #e1251b;}.tab-content {padding: 0 16px;}.tab-content .item {display: none;}.tab-content .item.active {display: block;}</style>
</head><body><div class="tab"><div class="tab-nav"><h3>每日特价</h3><ul><li><a class="active" href="javascript:;" data-id="0">精选</a></li><li><a href="javascript:;" data-id="1">美食</a></li><li><a href="javascript:;" data-id="2">百货</a></li><li><a href="javascript:;" data-id="3">个护</a></li><li><a href="javascript:;" data-id="4">预告</a></li></ul></div><div class="tab-content"><div class="item active"><img src="./images/tab00.png" alt="" /></div><div class="item"><img src="./images/tab01.png" alt="" /></div><div class="item"><img src="./images/tab02.png" alt="" /></div><div class="item"><img src="./images/tab03.png" alt="" /></div><div class="item"><img src="./images/tab04.png" alt="" /></div></div></div><script>const ul = document.querySelector('.tab-nav ul');const items = document.querySelectorAll('.tab-content .item');ul.addEventListener('mouseover', function (e) {if (e.target.tagName === 'A') {//   排他思想,其余a去掉active类document.querySelector('.tab-nav .active').classList.remove('active');//   当前元素添加active类e.target.classList.add('active');// 给5个链接添加自定义属性标注好序号document.querySelector('.tab-content .active').classList.remove('active');// 根据序号选择对应的底部盒子items[e.target.dataset.id].classList.add('active');}})</script>
</body></html>

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FLAN-T5:规模化指令微调的语言模型

摘要 在将数据集表述为指令的形式上进行语言模型微调&#xff0c;已被证明能够提升模型性能及其对未见任务的泛化能力。本文探讨了指令微调&#xff0c;特别关注以下三个方面&#xff1a;(1) 任务数量的扩展&#xff0c;(2) 模型规模的扩展&#xff0c;以及 (3) 基于链式思维&…

设计模式文章

1. 工厂模式 | 菜鸟教程

Xilinx Vivado开发环境快速导出hdf文件(bat批处理)

Xilinx FPGA使用Vivado开发环境创建MicroBlaze软核或ZYNQ PS侧SDK逻辑工程时&#xff0c;需要FPGA侧搭建的硬件平台文件&#xff0c;即hdf文件&#xff0c;常规方式是编译完成生成bit流文件后&#xff0c;通过File->Export->Export Hardware菜单来导出&#xff0c;在弹出…

UniApp 中实现智能吸顶 Tab 标签导航效果

前言在移动端应用开发中&#xff0c;Tab 标签导航是一种常见的交互模式。本文将详细介绍如何在 UniApp 中实现一个功能完善的智能吸顶 Tab 导航组件&#xff0c;该组件具有以下特性&#xff1a;&#x1f3af; 智能显示&#xff1a;根据滚动位置动态显示/隐藏&#x1f4cc; 吸顶…

ElasticSearch快速入门-1

文章目录Elasticsearch简介ES概念ES和关系型数据库的对比正序索引和倒序索引安装es、kibana、IK分词器ES操作_cat操作Mapping映射属性索引库操作索引库CRUD文档CRUD文档批处理操作Java客户端操作ESElasticsearch简介 就是一个搜索引擎数据库 以下都简称ES ES概念 ES和关系型…

【论文撰写】如何把AI生成的文本公式复制在word中,完整的复制公式,拷贝豆包生成的公式

1、问题描述 AI生成的内容 在对于含有公式的生成内容&#xff0c;直接拷贝到Word 会呈现类Markdown的格式&#xff0c;除了格式上&#xff0c;公式也不是标准格式。 如下列两个图片对比 2、工具 这时&#xff0c;就需要用另一个工具进行转换 Home - Snip Web Mathpix Acc…

【机器学习笔记 Ⅱ】5 矩阵乘法

矩阵乘法是神经网络、图形学、科学计算等领域的核心运算&#xff0c;用于高效处理线性变换和批量数据计算。以下是其数学定义、计算规则及实际应用的系统解析。1. 数学定义2. 计算步骤&#xff08;示例&#xff09;3. 代码实现 (1) Python&#xff08;NumPy&#xff09; import…

【数字后端】- 衡量design的congestion情况

基础概念 通常在RP的placement之后&#xff0c;就要去去查看设计的Density和Congestion情况。 而congestion的衡量指标有以下两点&#xff1a; &#xff08;1&#xff09;Overflow Congestion 分析基于一个基本『单元』称为GCELL: Routing Grid cell. Gcell 是工具自己定义…

Oracle面试题-体系结构

&#x1f4cc;1.如何查看 Oracle 数据库的版本信息&#xff1f; 1. 标准 SQL 查询&#xff08;推荐&#xff09; 方法 1&#xff1a;查询 v$version 视图&#xff08;最常用&#xff09; SELECT * FROM v$version;输出示例&#xff1a; BANNER -------------------------------…

Flex布局原理

1.布局原理 flex 是 flexible Box 的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性&#xff0c;任何一个容器都可以 指定为 flex 布局。 当我们为父盒子设为 flex 布局以后&#xff0c;子元素的 float、clear 和 vertical-align 属性将…

JavaScript 模块系统二十年:混乱、分裂与出路

JavaScript 模块系统&#xff1a;一场至今未醒的历史梦魇 一、引言&#xff1a;我们真的解决了“模块化”吗&#xff1f; 你可能以为&#xff0c;JavaScript 模块系统早已标准化&#xff0c;import/export 就是答案。 但现实却是另一番景象&#xff1a;构建报错、依赖冲突、加…

人工智能-基础篇-23-智能体Agent到底是什么?怎么理解?(智能体=看+想+做)

1、智能体是什么&#xff1f; 想象你有一个超级聪明的小助手&#xff0c;它能&#xff1a; 自己看环境&#xff08;比如看到天气、听到声音、读到数据&#xff09;&#xff1b;自己做决定&#xff08;比如下雨了要关窗&#xff0c;电量低要去充电&#xff09;&#xff1b;自己…

Java实现项目1——弹射球游戏

项目&#xff1a;弹射球游戏 项目描述&#xff1a; 类似于乒乓球的游戏&#xff0c;游戏可以播放背景音乐&#xff0c;可以更换背景图&#xff0c;当小球碰到下面的挡板后会反弹&#xff0c;当小球碰到方块后会增加分数&#xff0c;当小球掉落会导致游戏失败&#xff0c;按下…

(十八)深入了解 AVFoundation-编辑:添加背景音乐与音量控制(下)——实战篇

一、功能目标回顾在理论篇中&#xff0c;我们系统地介绍了如何使用 AVFoundation 添加背景音乐音轨&#xff0c;并通过 AVMutableAudioMix 与 AVMutableAudioMixInputParameters 实现多音轨混音与音量控制。我们了解了诸如淡入淡出、静音控制、动态音量曲线等核心技术细节。本篇…

如何在新机器上设置github完成内容git push

如果你在一台新的机器上git pull 仓库&#xff0c;完成修改&#xff0c;然后git push&#xff0c;会发现下面错误&#xff1a; Username for https://github.com: xiaomaolv Password for https://xiaomaolvgithub.com: remote: Support for password authentication was rem…

Rust 注释

Rust 注释 引言 Rust 编程语言以其内存安全、并发支持和高性能等特点在软件开发领域获得了广泛的关注。在Rust编程中&#xff0c;注释是一种非常重要的元素&#xff0c;它不仅可以帮助程序员理解代码&#xff0c;还可以提高代码的可维护性和可读性。本文将详细介绍Rust中的注释…

Flink Oracle CDC 环境配置与验证

一、Oracle 数据库核心配置详解 1. 启用归档日志&#xff08;Archiving Log&#xff09; Oracle CDC 依赖归档日志获取增量变更数据&#xff0c;需按以下步骤启用&#xff1a; 非CDB数据库配置&#xff1a; -- 以DBA身份连接数据库 CONNECT sys/password AS SYSDBA; -- …

ssh: Could not resolve hostname d: Temporary failure in name resolution

关于不能本机上传文件夹到服务器上的一个问题的记录。 scp -r "D:\***\datasets" usernamexxxxxx:接收文件夹名 一直报错&#xff1a;ssh: Could not resolve hostname d: Temporary failure in name resolution 反复尝试发现无果之后想起来&#xff0c;在传输的时候…

2025年的前后端一体化CMS框架优选方案

以下是结合技术生态、开发效率和商业落地验证&#xff0c;整理的2025年前后端一体化CMS框架优选方案&#xff1a;一、‌主流成熟框架组合‌1. ‌React Node.js (Express/Next.js)‌‌前端‌&#xff1a;React生态成熟&#xff0c;配合Redux状态管理&#xff0c;适合复杂后台界…

《声音的变形记:Web Audio API的实时特效法则》

用户期待更丰富、更具沉浸感的听觉体验时&#xff0c;基于Web Audio API实现的实时音频特效&#xff0c;就像是为这片森林注入了灵动的精灵&#xff0c;让简单的声音蜕变为震撼人心的听觉盛宴。回声特效带来空间的深邃回响&#xff0c;变声效果赋予声音全新的个性面貌。接下来&…