当前位置: 首页 > news >正文

在 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 元素代表一个可点击的图标。其中:

  1. @click=“choseIconInside”,在父级容器上绑定点击事件监听器。
  2. 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可以使代码更清晰、更简洁。


四. 事件委托的优势

  1. 减少事件监听器数量:通过在父元素上绑定事件监听器,避免了在每个子元素上分别绑定监听器,减少了内存消耗和提高了性能。

  2. 动态添加元素:如果页面中需要动态添加新的子元素,事件委托可以确保新元素也能自动获得事件处理能力,而无需重新绑定事件。

  3. 简化代码:使用事件委托可以使你的代码更加简洁和易于维护,尤其是当有大量相似类型的元素需要处理相同类型的事件时。


五. 注意事项

  1. 事件目标判断:在事件处理函数中,你需要确保检查e.target(事件的目标元素)是否是你想要处理的元素。这是因为事件冒泡也可能触发父元素上绑定的事件,即使点击的是父元素内部的其他非目标元素。

  2. 事件阻止:有时你可能需要阻止事件的进一步传播,例如使用e.stopPropagation()。这样可以防止事件冒泡到更高级别的元素,避免触发不必要的事件处理。

  3. e.stopPropagation() 是一个在JavaScript中用于阻止事件冒泡的方法。当你在DOM树中的某个元素上触发一个事件(比如点击事件),这个事件会首先在目标元素上触发,然后沿着DOM树向上冒泡,依次触发其祖先元素上的事件监听器。如果你不希望事件继续向上冒泡并触发更多的事件处理器,可以调用 e.stopPropagation()

  4. 调用 stopPropagation() 方法后,事件将不会继续在其祖先元素上调用任何事件处理器。这在处理复杂的DOM结构时非常有用,可以防止意外触发不需要的事件处理器,从而避免潜在的性能问题或逻辑错误。

  5. 性能考量:虽然事件委托可以提高性能,但过多的事件监听器仍然可能影响性能。合理规划事件监听器的布局和层级可以进一步优化应用的响应速度。


六. 本章小结

事件委托是一种高效且优雅的事件处理方式,尤其适用于处理大量相似子元素的事件。在Vue.js项目中运用事件委托,可以极大地提升代码的可读性和性能表现。

创作不易,感觉有用,就一键三连,感谢(●'◡'●)

相关文章:

在 VueJS 中使用事件委托处理点击事件(事件委托,vue事件委托,什么是事件委托,什么是vue的事件委托)

前言 在开发 Vue 项目时&#xff0c;我们经常需要处理大量的点击事件。为每个可点击的元素单独添加事件监听器不仅会增加代码的复杂度&#xff0c;还会降低性能。事件委托是一种有效的优化方式&#xff0c;它可以显著减少事件监听器的数量&#xff0c;提高代码的可维护性和执行…...

密码学简史:时间密语

​ 注&#xff1a;机翻&#xff0c;未校。 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数据结构】---初始数据结构

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 前言 从今天开始我们就要学习Java…...

MySQL--主从复制

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、什么是主从复制 1、定义 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数据库一…...

Linux RT调度器之负载均衡

RT调度类的调度策略是&#xff1a;保证TopN&#xff08;N为系统cpu个数&#xff09;优先级的任务可以优先获得cpu资源。除了在任务选核时通过基于cpu优先级的选核策略保证这一点外&#xff0c;还有其它流程&#xff0c;我们姑且将这部分流程称作RT调度器的负载均衡&#xff08;…...

pwn学习笔记(8)--初识Pwn沙箱

初识Pwn沙箱 ​ 沙箱机制&#xff0c;英文sandbox&#xff0c;是计算机领域的虚拟技术&#xff0c;常见于安全方向。一般说来&#xff0c;我们会将不受信任的软件放在沙箱中运行&#xff0c;一旦该软件有恶意行为&#xff0c;则禁止该程序的进一步运行&#xff0c;不会对真实系…...

Day18_2--Vue.js Ajax(使用 Axios)基础入门学习

Vue.js 中的 Ajax 请求&#xff08;使用 Axios&#xff09; 什么是 Axios&#xff1f; Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;可以用于浏览器和 Node.js 环境中。它是现代化的 Ajax 库&#xff0c;用来替代传统的 XMLHttpRequest。 为什么选择 Axios&#xf…...

windows11远程桌面如何打开

随着远程办公的普及&#xff0c;选择合适的远程桌面工具变得尤为重要。在Windows 11上&#xff0c;用户可以利用系统自带的远程桌面功能&#xff0c;或选择更专业的第三方解决方案&#xff0c;如Splashtop。本文将详细介绍如何在Windows 11上启用远程桌面&#xff0c;并对比Win…...

qt代码显示,包含文本颜色设置等

QScintilla 安装示例代码参考链接 安装 最近发现了一个有趣的库&#xff0c;qt的插件库&#xff0c;之前一直以为显示代码时是重写QTextEdit来实现的&#xff0c;结果qt有现成的一个库来显示这些东西&#xff0c;在此记录一下 # 安装 QScintilla pip install QScintilla示例代码…...

抽象代数精解【6】

文章目录 简单密码算法模运算数学定义置换移位代换仿射 参考文献 简单密码算法 模运算数学定义 模m剩余类集 Z m Z_m Zm​ 设∀a,b∈Z&#xff08;整数&#xff09;&#xff0c;m为正整数 m|b-a &#xff0c;称a R b R满足反身性、对称性、传递性 1、R为同余关系&#xff0c;…...

如何选择合适的PCB材料?FR4、陶瓷、还是金属基板?

选择合适的PCB材料对于电路板的性能、可靠性和成本至关重要。不同的PCB材料具有不同的特性&#xff0c;适用于不同的应用场景。 01 FR4&#xff08;玻璃纤维环氧树脂&#xff09; FR4的特点&#xff1a; 广泛应用&#xff1a;FR4是最常见的PCB基板材料&#xff0c;广泛应用…...

PXE学习及其简单应用

一、PXE 的定义 PXE 是一种基于网络的启动技术&#xff0c;最初由 Intel 开发&#xff0c;旨在提供一种在没有本地存储设备的情况下通过网络启动操作系统的标准。PXE 集成在计算机的 BIOS 或 UEFI 中&#xff0c;允许计算机从网络服务器下载并启动操作系统或其他软件。 二、PX…...

【Python】把list转换成json文件(list中为字典,元素按行写入)

0.前言 数据需要处理成与大模型输入相同类型的数据&#xff0c;从csv文件读出后&#xff0c;想要转换成json文件&#xff0c;看了好多资料都是把整个list写入了json&#xff0c;并不是我想要的格式&#xff0c;这里记录一下最后的按行写入的格式。 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季&#xff1a;第8章_激光SLAM系统 先 导 课第…...

【安当产品应用案例100集】005-安当ASP实现Exchange双因素登录认证

Exchange双因素登录通过增加额外的安全验证层&#xff0c;可以有效提高企业邮箱系统的安全性&#xff0c;减少了数据泄露和账号被盗的风险&#xff0c;同时也符合了日益严格的安全合规要求。 其必要性主要体现在以下几个方面&#xff1a; 提高安全性&#xff1a;传统的用户名…...

【Bug】Pytorch RuntimeError: DataLoader worker (pid(s) 15904) exited unexpectedly

【Bug1】RuntimeError: DataLoader worker (pid(s) 15904) exited unexpectedly 知乎&#xff1a;https://zhuanlan.zhihu.com/p/712407893 环境 Windows 11 Python 3.10 torch 2.0.1 numpy 1.25.0问题详情 在使用 PyTorch 的 DataLoader 时出现的错误。详情 RuntimeError:A…...

谈谈冯诺依曼体系

我们都知道冯诺依曼体系这张图最为代表性&#xff0c;而接下来我们就来浅谈一下各部分之间的作用~ 输入设备&#xff1a;键盘&#xff0c;磁盘&#xff0c;网卡&#xff0c;话筒等等 输出设备&#xff1a;磁盘&#xff0c;网卡&#xff0c;声卡&#xff0c;显示屏等等 这些硬件…...

第十二章 元数据管理10分

12.1 引言 如果没有元数据&#xff0c;组织可能根本无法管理其数据。 ISO/IEC11179 元数据注册标准。 元数据管理原则&#xff1a;应归尽归&#xff0c;应收尽收。衡量标准&#xff1a;目录是否完整。&#xff08;去第十二章 元数据管理&#xff09;。 主数据管理&#xff1a;主…...

eco_tracker

特征 VGG是第一个提出使用块的想法&#xff0c;通过使用循环和子程序&#xff0c;可以很容易地在任何现代深度学习框架的代码中实现这些重复的架构。 原始VGG网络有5个卷积块&#xff0c;其中前两个块各有一个卷积层&#xff0c;后三个块各包含两个卷积层。 第一个模块有64个…...

electron 鼠标事件

版本&#xff1a;"electron": "^22.3.27"&#xff0c;实现一个在windows下图片点击右键&#xff0c;使用electron打开的功能。 一、注册表操作 注册表工具类 const cp require("child_process"); const { app } require(electron/remote) e…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

游戏开发中常见的战斗数值英文缩写对照表

游戏开发中常见的战斗数值英文缩写对照表 基础属性&#xff08;Basic Attributes&#xff09; 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...