在 VueJS 中使用事件委托处理点击事件(事件委托,vue事件委托,什么是事件委托,什么是vue的事件委托)
前言
在开发 Vue 项目时,我们经常需要处理大量的点击事件。为每个可点击的元素单独添加事件监听器不仅会增加代码的复杂度,还会降低性能。事件委托是一种有效的优化方式,它可以显著减少事件监听器的数量,提高代码的可维护性和执行效率。我们通过一个实际示例,详细讲解如何在 Vue 项目中使用事件委托。简单记录一下

一. 事件委托定义
VueJS中的事件委托是一种优化事件处理和提升性能的技术,它允许你在一个父元素上监听事件,而不是在每个子元素上单独绑定事件处理器。这种做法基于JavaScript 的事件冒泡机制,即在DOM树中,事件会从最深层的节点开始向上冒泡,直到到达document根节点。
二. HTML 内容结构
1. 首先,看下 HTML 部分:
<div class="homeView_box"><div class="iconInside_box" @click="choseIconInside"><img src="@/assets/sxzy/1.png" class="cmCt img1" data-action="moveUp" /><imgsrc="@/assets/sxzy/2.png"class="cmCt img2"data-action="moveDown"/><imgsrc="@/assets/icons/home3.png"class="cmCt img3"data-action="mainView"@click="choseHomeIcon"/><imgsrc="@/assets/sxzy/3.png"class="cmCt img4"data-action="moveLeft"/><imgsrc="@/assets/sxzy/4.png"class="cmCt img5"data-action="moveRight"/></div></div>
2. 以上部分代码,我们写了一个父级 div 容器 .iconInside_box,其中包含5个 img 元素,每个 img 元素代表一个可点击的图标。其中:
- @click=“choseIconInside”,在父级容器上绑定点击事件监听器。
- data-action,每个 img 元素都有一个data-action 属性,用于标识点击时要执行的动作。
三. 事件逻辑函数
1. 事件触发时,事件委托的处理函数;这里我们有一个包含多个图标的 div 容器,每个HTML元素图标,有不同的点击操作,请看以下:
choseIconInside(e) {const action = e.target.getAttribute("data-action");if (action) {switch (action) {case "moveUp":console.log("向上移动");// 实现向上移动的逻辑this.viewer.camera.moveUp(10);break;case "moveDown":console.log("向下移动");// 实现向下移动的逻辑this.viewer.camera.moveDown(10);break;case "moveLeft":console.log("向左移动");// 实现向左移动的逻辑this.viewer.camera.moveLeft(10);break;case "moveRight":console.log("向右移动");// 实现向右移动的逻辑this.viewer.camera.moveRight(10);break;case "mainView":console.log("主视角图");let _this = this;this.viewer.camera.flyTo({destination: this.Cesium.Cartesian3.fromDegrees(118.879624,32.036791,10),orientation: {// 设置相机的默认方向(heading),此处为朝向东南方向heading: this.Cesium.Math.toRadians(238),// 设置相机的俯仰角(pitch),此处为略微向下看pitch: this.Cesium.Math.toRadians(-15),// 设置相机的滚转角(roll),此处为不滚转roll: 0.0,},duration: 2,complete: function () {_this.viewer.camera.zoomOut(200); // 在飞行动画完成后缩小场景},});break;default:console.log("未知动作");}}},},
2. 以上代码我们展示了一个事件处理器函数 choseIconInside,它用于响应用户在界面中对某些图标或按钮的点击操作。该函数主要实现了以下功能:
1. 读取data-action属性:
- 当事件触发时,函数通过事件对象 e.target 获取被点击元素上的 data-action 属性值。这个属性是用来区分不同图标或按钮的功能的。
2. 根据data-action执行不同操作:
- 使用 switch 语句根据 data-action 的值执行相应的逻辑。
- "moveUp" 和 "moveDown":控制相机沿垂直轴向上或向下移动。
- "moveLeft" 和 "moveRight":控制相机沿水平轴向左或向右移动。
- "mainView":将相机飞往预设的位置,并设置相机的方向和角度,最后在动画完成后再执行缩放操作。
3. Cesium相关操作:
- this.viewer.camera 是用来控制3D场景中相机行为的对象。
- moveUp, moveDown, moveLeft, 和 moveRight 方法用于即时地改变相机位置。
- flyTo 方法则用于创建一个平滑的相机飞行动画到指定的地理坐标,同时可以设定飞行结束后的回调函数。
4. 错误处理:
- 如果 data-action 的值不是预期的任何一种情况,代码将输出一条“未知动作”的日志信息。
3. choseIconInside 函数是一个用于处理用户交互的事件处理器,它根据被点击元素的 data-action 属性值执行特定的相机控制操作,从而实现对3D场景的导航和视角调整。这种设计模式使得代码更加模块化和可维护,同时也提高了用户界面的响应性和交互性。
4. 这里的switch语句是一种选择结构,它允许程序基于不同的条件来执行不同的代码块。switch语句通常用来替代多个if...else if...else语句,当有大量条件需要检查时,使用switch可以使代码更清晰、更简洁。
四. 事件委托的优势
减少事件监听器数量:通过在父元素上绑定事件监听器,避免了在每个子元素上分别绑定监听器,减少了内存消耗和提高了性能。
动态添加元素:如果页面中需要动态添加新的子元素,事件委托可以确保新元素也能自动获得事件处理能力,而无需重新绑定事件。
简化代码:使用事件委托可以使你的代码更加简洁和易于维护,尤其是当有大量相似类型的元素需要处理相同类型的事件时。
五. 注意事项
事件目标判断:在事件处理函数中,你需要确保检查
e.target(事件的目标元素)是否是你想要处理的元素。这是因为事件冒泡也可能触发父元素上绑定的事件,即使点击的是父元素内部的其他非目标元素。事件阻止:有时你可能需要阻止事件的进一步传播,例如使用
e.stopPropagation()。这样可以防止事件冒泡到更高级别的元素,避免触发不必要的事件处理。
e.stopPropagation()是一个在JavaScript中用于阻止事件冒泡的方法。当你在DOM树中的某个元素上触发一个事件(比如点击事件),这个事件会首先在目标元素上触发,然后沿着DOM树向上冒泡,依次触发其祖先元素上的事件监听器。如果你不希望事件继续向上冒泡并触发更多的事件处理器,可以调用e.stopPropagation()。调用
stopPropagation()方法后,事件将不会继续在其祖先元素上调用任何事件处理器。这在处理复杂的DOM结构时非常有用,可以防止意外触发不需要的事件处理器,从而避免潜在的性能问题或逻辑错误。性能考量:虽然事件委托可以提高性能,但过多的事件监听器仍然可能影响性能。合理规划事件监听器的布局和层级可以进一步优化应用的响应速度。
六. 本章小结
事件委托是一种高效且优雅的事件处理方式,尤其适用于处理大量相似子元素的事件。在Vue.js项目中运用事件委托,可以极大地提升代码的可读性和性能表现。

创作不易,感觉有用,就一键三连,感谢(●'◡'●)
相关文章:
在 VueJS 中使用事件委托处理点击事件(事件委托,vue事件委托,什么是事件委托,什么是vue的事件委托)
前言 在开发 Vue 项目时,我们经常需要处理大量的点击事件。为每个可点击的元素单独添加事件监听器不仅会增加代码的复杂度,还会降低性能。事件委托是一种有效的优化方式,它可以显著减少事件监听器的数量,提高代码的可维护性和执行…...
密码学简史:时间密语
注:机翻,未校。 A brief history of cryptography: Sending secret messages throughout time Stemming from the Greek words for “hidden writing,” cryptography is the practice of encrypting transmitted information so that it can only b…...
【Java数据结构】---初始数据结构
乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 ,Java 欢迎大家访问~ 创作不易,大佬们点赞鼓励下吧~ 前言 从今天开始我们就要学习Java…...
MySQL--主从复制
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、什么是主从复制 1、定义 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一…...
Linux RT调度器之负载均衡
RT调度类的调度策略是:保证TopN(N为系统cpu个数)优先级的任务可以优先获得cpu资源。除了在任务选核时通过基于cpu优先级的选核策略保证这一点外,还有其它流程,我们姑且将这部分流程称作RT调度器的负载均衡(…...
pwn学习笔记(8)--初识Pwn沙箱
初识Pwn沙箱 沙箱机制,英文sandbox,是计算机领域的虚拟技术,常见于安全方向。一般说来,我们会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系…...
Day18_2--Vue.js Ajax(使用 Axios)基础入门学习
Vue.js 中的 Ajax 请求(使用 Axios) 什么是 Axios? Axios 是一个基于 Promise 的 HTTP 客户端,可以用于浏览器和 Node.js 环境中。它是现代化的 Ajax 库,用来替代传统的 XMLHttpRequest。 为什么选择 Axios…...
windows11远程桌面如何打开
随着远程办公的普及,选择合适的远程桌面工具变得尤为重要。在Windows 11上,用户可以利用系统自带的远程桌面功能,或选择更专业的第三方解决方案,如Splashtop。本文将详细介绍如何在Windows 11上启用远程桌面,并对比Win…...
qt代码显示,包含文本颜色设置等
QScintilla 安装示例代码参考链接 安装 最近发现了一个有趣的库,qt的插件库,之前一直以为显示代码时是重写QTextEdit来实现的,结果qt有现成的一个库来显示这些东西,在此记录一下 # 安装 QScintilla pip install QScintilla示例代码…...
抽象代数精解【6】
文章目录 简单密码算法模运算数学定义置换移位代换仿射 参考文献 简单密码算法 模运算数学定义 模m剩余类集 Z m Z_m Zm 设∀a,b∈Z(整数),m为正整数 m|b-a ,称a R b R满足反身性、对称性、传递性 1、R为同余关系,…...
如何选择合适的PCB材料?FR4、陶瓷、还是金属基板?
选择合适的PCB材料对于电路板的性能、可靠性和成本至关重要。不同的PCB材料具有不同的特性,适用于不同的应用场景。 01 FR4(玻璃纤维环氧树脂) FR4的特点: 广泛应用:FR4是最常见的PCB基板材料,广泛应用…...
PXE学习及其简单应用
一、PXE 的定义 PXE 是一种基于网络的启动技术,最初由 Intel 开发,旨在提供一种在没有本地存储设备的情况下通过网络启动操作系统的标准。PXE 集成在计算机的 BIOS 或 UEFI 中,允许计算机从网络服务器下载并启动操作系统或其他软件。 二、PX…...
【Python】把list转换成json文件(list中为字典,元素按行写入)
0.前言 数据需要处理成与大模型输入相同类型的数据,从csv文件读出后,想要转换成json文件,看了好多资料都是把整个list写入了json,并不是我想要的格式,这里记录一下最后的按行写入的格式。 1.list转json import json …...
《机器人SLAM导航核心技术与实战》第1季:第8章_激光SLAM系统
视频讲解 【第1季】8.第8章_激光SLAM系统-视频讲解【第1季】8.1.第8章_激光SLAM系统_Gmapping算法-视频讲解【第1季】8.2.第8章_激光SLAM系统_Cartographer算法-视频讲解【第1季】8.3.第8章_激光SLAM系统_LOAM算法-视频讲解 第1季:第8章_激光SLAM系统 先 导 课第…...
【安当产品应用案例100集】005-安当ASP实现Exchange双因素登录认证
Exchange双因素登录通过增加额外的安全验证层,可以有效提高企业邮箱系统的安全性,减少了数据泄露和账号被盗的风险,同时也符合了日益严格的安全合规要求。 其必要性主要体现在以下几个方面: 提高安全性:传统的用户名…...
【Bug】Pytorch RuntimeError: DataLoader worker (pid(s) 15904) exited unexpectedly
【Bug1】RuntimeError: DataLoader worker (pid(s) 15904) exited unexpectedly 知乎:https://zhuanlan.zhihu.com/p/712407893 环境 Windows 11 Python 3.10 torch 2.0.1 numpy 1.25.0问题详情 在使用 PyTorch 的 DataLoader 时出现的错误。详情 RuntimeError:A…...
谈谈冯诺依曼体系
我们都知道冯诺依曼体系这张图最为代表性,而接下来我们就来浅谈一下各部分之间的作用~ 输入设备:键盘,磁盘,网卡,话筒等等 输出设备:磁盘,网卡,声卡,显示屏等等 这些硬件…...
第十二章 元数据管理10分
12.1 引言 如果没有元数据,组织可能根本无法管理其数据。 ISO/IEC11179 元数据注册标准。 元数据管理原则:应归尽归,应收尽收。衡量标准:目录是否完整。(去第十二章 元数据管理)。 主数据管理:主…...
eco_tracker
特征 VGG是第一个提出使用块的想法,通过使用循环和子程序,可以很容易地在任何现代深度学习框架的代码中实现这些重复的架构。 原始VGG网络有5个卷积块,其中前两个块各有一个卷积层,后三个块各包含两个卷积层。 第一个模块有64个…...
electron 鼠标事件
版本:"electron": "^22.3.27",实现一个在windows下图片点击右键,使用electron打开的功能。 一、注册表操作 注册表工具类 const cp require("child_process"); const { app } require(electron/remote) e…...
DeerFlow2.0 Docker + 本地 Ollama qwen3.5:9b 部署指南
DeerFlow2.0 Docker 本地 Ollama qwen3.5:9b 部署指南 实现 Token 自由!!!本地模型免费 :) 1. 前提条件 Windows 11 家庭版(版本号 25H2)Docker Desktop 已安装并运行WSL2 已安装并配置Olla…...
QT 基于qcustomplot实现热力图(四):动态数据流与交互优化实战
1. 动态数据流的核心实现策略 在实时监控系统中,热力图的数据往往需要持续更新。我遇到过不少开发者直接粗暴地全量刷新整个数据集,结果界面卡顿得像老式幻灯片。这里分享三种经过实战检验的动态更新方案,每种都有其适用场景。 增量更新法最适…...
DeepSeek-OCR-2效果展示:OCR结果直接生成可编辑Word/PDF双格式
DeepSeek-OCR-2效果展示:OCR结果直接生成可编辑Word/PDF双格式 本文展示DeepSeek-OCR-2模型的强大OCR能力,重点演示如何将扫描文档直接转换为可编辑的Word和PDF格式,让文档数字化变得简单高效。 1. 核心能力概览 DeepSeek-OCR-2是2026年1月发…...
EmbeddingGemma-300m效果展示:多语言文本相似度计算实战
EmbeddingGemma-300m效果展示:多语言文本相似度计算实战 1. 引言 文本嵌入模型正在改变我们处理多语言内容的方式。想象一下,你有一个包含中文、英文、法文等多种语言的文档库,如何快速找到语义相似的内容?传统的关键词匹配方法…...
5个步骤彻底修复Windows更新问题:Reset Windows Update Tool完整指南
5个步骤彻底修复Windows更新问题:Reset Windows Update Tool完整指南 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...
从Dify到Coze再回来:一个后端开发用Gin+Swagger构建AI工作流的踩坑实录
从Dify到Coze再回来:一个后端开发用GinSwagger构建AI工作流的踩坑实录 作为一名长期使用Gin框架的后端开发者,当我第一次尝试将现有服务接入Dify平台构建AI工作流时,本以为会是一次顺畅的旅程。毕竟,我们的API已经通过Swagger 2.0…...
Emacs verilog-mode实战:5分钟搞定AUTOARG自动参数生成(附避坑指南)
Emacs verilog-mode实战:5分钟掌握AUTOARG高效参数生成技巧 在数字电路设计领域,Verilog作为主流硬件描述语言,其模块化开发方式虽然提高了代码复用性,却也带来了大量重复性工作。模块接口定义中的参数列表维护就是典型痛点——每…...
7天掌握Driver Store Explorer:Windows驱动管理的完整指南
7天掌握Driver Store Explorer:Windows驱动管理的完整指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer Driver Store Explorer(简称RAPR)是…...
保姆级教程:用PtitPrince的RainCloud函数,5步搞定分组数据可视化
5步精通RainCloud Plot:用PtitPrince实现专业级分组数据可视化 第一次看到同事用雨云图展示A/B测试结果时,我被这种"既见森林又见树木"的呈现方式震撼了——左侧的密度曲线如山脉般起伏,中间的箱线图标出关键分位点,右侧…...
ncmdumpGUI:网易云音乐加密文件转换的完整解决方案
ncmdumpGUI:网易云音乐加密文件转换的完整解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 一、初识ncmdumpGUI:解密音乐文件的…...
