对浏览器事件机制的理解

浏览器事件是什么:

事件是用户操作网页时发生的交互动作,比如 click/move, 事件除了用户触发的动作外,还可以是文档加载,窗口滚动大小调整。事件被封装成一个 event 对象,包含了该事件发生时的所有相关信息( event 的属性)以及可以对事件进行的操作( event 的方法)。

事件触发的过程是怎样的

浏览器的事件触发实际上是有三个阶段的,首先捕获,即从根节点开始传播,一直到目标元素,然后从目标元素开始冒泡,冒泡到根节点。
目前vue不绑定修饰符的话默认都是执行冒泡阶段的回调函数,如果父元素也有绑定点击事件,就会先执行子元素事件,再执行父元素事件。也可以使用capture来指定捕获阶段执行,这样如果父元素绑定的也是捕获事件,那就会先执行父元素的回调,再执行子元素的回调。主要是一个执行先后顺序的问题

对事件委托的理解

事件委托就是利用了事件冒泡的机制,比如ul下的li,本来我们需要给每个li绑定点击事件,但是这样会消耗大量内存,因此我们给ul绑定点击事件,用户点击li的时候,就会冒泡到ul上,执行ul的点击事件,这时候我们利用event.target来识别实际触发事件的子元素。这个target身上可以获取到li的一些属性,或者当初在li循环的时候就把data-id 定义好,就可以直接用target.dataset.id来获取点击的li元素的id
例如:

<ul @click="myEvent($event)"><li :data-id="1">1</li><li :data-id="2">2</li><li :data-id="3">3</li>
</ul>
const myEvent = (event) => {console.log(event.target.dataset.id,'event.target')
}

事件委托的使用场景

大量元素需要绑定的情况吧,无限滚动列表、动态渲染的表格数据,比如数据可能动态生成,越来越多,或者会有一些动态生成的dom元素不好绑定【vue已经不需要手动做事件委托了,Vue的模板语法已优化事件处理机制,直接通过@click绑定到子元素时,Vue会复用事件处理器而非重复创建,因此短列表或静态内容无需强制使用事件委托】

事件委托的局限性

当然,事件委托也是有局限的。比如 focus、blur 之类的事件没有事件冒泡机制,所以无法实现事件委托;mousemove、mouseout 这样的事件,虽然有事件冒泡,但是只能不断通过位置去计算定位,对性能消耗高,因此也是不适合于事件委托的。

如何阻止事件冒泡

vue中使用.stop修饰符,或者手动调用event.stopPropagation

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

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

相关文章

XCVP1902-2MSEVSVA6865 AMD 赛灵思 XilinxVersal Premium FPGA

XCVP1902-2MSEVSVA6865 是 AMD 赛灵思&#xff08;Xilinx&#xff09;Versal Premium FPGA 系列中的高端自适应系统级芯片&#xff08;Adaptive SoC&#xff09;变体&#xff0c;面向需要极高逻辑密度、海量 I/O 与超高速收发能力的数据中心互联、原型验证与高性能网络加速等应…

kotlin - 2个Fragment实现左右显示,左边列表,右边详情,平板横、竖屏切换(一)

kotlin - 2个Fragment实现左右显示&#xff0c;左边列表&#xff0c;右边详情&#xff0c;平板横、竖屏切换(要使用平板测试)平板横屏&#xff1a;左右fragment实现分屏效果&#xff0c;平板竖屏&#xff1a;只显示左边的fragment&#xff0c;点击才显示右边fragment屏幕旋转&a…

推荐系统中的AB测试:从设计到分析全流程

推荐系统中的AB测试:从设计到分析全流程 关键词:推荐系统、AB测试、实验设计、数据分析、效果评估、统计显著性、用户体验 摘要:本文将深入探讨推荐系统中AB测试的全流程,从实验设计到结果分析。我们将用通俗易懂的方式解释AB测试的核心概念,展示如何科学地评估推荐算法改…

【go语言 | 第1篇】Go环境安装+go语言特性

文章目录go开发环境1. 下载安装包2. 配置环境变量3. GOPROXYgo语言特性1. go的优势2. go适合做什么3. go缺点编写一个go程序注&#xff1a;在VSCode中补全go代码go开发环境 我这里是windows操作系统的环境安装&#xff0c;其他系统可以查看菜鸟教程&#xff1a;Go 语言环境安装…

【Pywinauto库】0. Pywinauto Windows GUI 自动化指南

概述 Pywinauto 是一个用于自动化 Windows GUI 应用程序的 Python 库&#xff0c;适用于自动化测试、数据录入和其他重复性桌面操作。 快速参考表方面方法/属性示例说明安装pip install pywinauto安装库后端选择Application(backend"uia") 或 Application(backend&qu…

CStringArray 和 CStringList

CStringArray 和 CStringList 都是 MFC 中用于管理字符串集合的类&#xff0c;但它们的内部数据结构和适用场景有显著差异&#xff0c;选择时需根据具体操作需求决定。以下从核心区别、功能对比和适用场景三个方面详细说明&#xff1a;一、核心区别&#xff1a;数据结构决定特性…

2025版基于springboot的企业考勤管理系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

设计模式(C++)详解—单例模式(1)

<摘要> 单例模式是创建型设计模式中最经典且应用最广泛的设计模式之一&#xff0c;它确保一个类只有一个实例并提供全局访问点。本文从历史背景和核心概念出发&#xff0c;详细阐述了单例模式的产生背景和演进历程&#xff0c;深入剖析了其在资源管理、状态一致性和访问控…

将GitHub远程仓库修改为ssh

8 将GitHub远程仓库修改为ssh 文章目录8 将GitHub远程仓库修改为ssh1 创建本地的ssh密钥2 设置GitHub密钥3 将本地库链接到远程仓库很多时候在使用GitHub的远程链接使用的是http的格式&#xff0c;但是这个格式并不好&#xff0c;尤其是在代码上传的时候&#xff0c;因此需要采…

【OEC-Turbo】网心云 OEC-Turbo 刷机 Armbian 系统教程

前言 大量网心云 OEC 及 OEC-Turbo 设备流入二手市场&#xff08;如海鲜市场&#xff09;&#xff0c;价格低至 70-100 元。相比同配置的拾光坞 N3&#xff08;约 380 元&#xff09;&#xff0c;OEC-Turbo 仅需一个零头&#xff0c;性价比极高。这些“矿渣”设备外观与玩客云…

25.线程概念和控制(二)

一、线程周边问题1.线程的优点创建一个新线程的代价要比创建一个新进程小得多。线程占用的资源要比进程少很多。能充分利用多处理器的可并行数量。在等待慢速I/O操作结束的同时&#xff0c;程序可执行其他的计算任务。计算密集型应用&#xff0c;为了能在多处理器系统上运行&am…

【CVPR2023】奔跑而非行走:追求更高FLOPS以实现更快神经网络

文章目录一、论文信息二、论文概要三、实验动机四、创新之处五、实验分析六、核心代码注释版本七、实验总结一、论文信息 论文题目&#xff1a;Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks中文题目&#xff1a;奔跑而非行走&#xff1a;追求更高FLOPS…

JVM(二)--- 类加载子系统

目录 前言 一、类加载过程 1. loading阶段 2. Linking阶段 2.1 验证 2.2 准备 2.3 解析 3. Initialization阶段 二、类加载器 1. 类加载器的分类 2. 用户自定义类加载器 三、双亲委派机制 四、其他知识点 前言 JVM的内存结构如图所示&#xff1a; 一、类加载过程…

Docker 容器的使用

1.容器的基本信息[roothost1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ac8245b5b08 img-layers-test "python /app/app.py" 45 hours ago Exited (0) 45 hour…

LLMs之Hallucinate:《Why Language Models Hallucinate》的翻译与解读

LLMs之Hallucinate&#xff1a;《Why Language Models Hallucinate》的翻译与解读 导读&#xff1a;该论文深入分析了语言模型中幻觉现象的成因&#xff0c;认为幻觉源于预训练阶段的统计压力和后训练阶段评估体系对猜测行为的奖励。论文提出了通过修改评估方法&#xff0c;使其…

Spring Cloud @RefreshScope 作用是什么?

RefreshScope 是 Spring Cloud 中的一个重要注解&#xff0c;主要作用如下&#xff1a; 主要功能动态刷新配置 使 Bean 能够在运行时动态刷新配置属性当配置中心的配置发生变化时&#xff0c;无需重启应用即可生效作用域管理 为 Bean 创建一个特殊的作用域 refresh标记的 Bean …

Flutter SDK 安装与国内镜像配置全流程(Windows / macOS / Linux)

这是一份面向国内网络环境的 Flutter 从零到可运行指引&#xff1a;覆盖 SDK 安装、平台依赖准备、国内镜像配置&#xff08;PUB_HOSTED_URL、FLUTTER_STORAGE_BASE_URL&#xff09;、Android 侧 Gradle 仓库加速&#xff0c;以及 Java/Gradle 版本兼容的关键坑位与排查思路。文…

【Java】NIO 简单介绍

简介 从 Java 1.4 版本开始引入的一个新的 I/O API&#xff0c;可以替代标准的 Java I/O。提供了与标准 I/O 不同的工作方式&#xff0c;核心是 通道&#xff08;Channel&#xff09;、缓冲区&#xff08;Buffer&#xff09; 和 选择器&#xff08;Selector&#xff09;。支持非…

Java爬虫获取京东item_get_app数据的实战指南

一、引言京东开放平台提供了丰富的API接口&#xff0c;其中item_get_app接口可用于获取商品的详细信息。这些数据对于市场分析、价格监控、商品推荐等场景具有重要价值。本文将详细介绍如何使用Java编写爬虫&#xff0c;通过调用京东开放平台的item_get_app接口获取商品详情数据…

Vue3源码reactivity响应式篇之批量更新

概述 在vue3响应式系统设计中&#xff0c;批量更新是优化性能的核心机制之一。当短时间内频繁多次修改响应式数据时&#xff0c;批量更新可以避免频繁触发订阅者的更新操作&#xff0c;将这些更新操作合并为一次&#xff0c;从而减少不必要的计算和DOM操作。 批量更新也是利用链…