Vue-事件修饰符

事件修饰符

prevent (阻止默认事件)

超链接 + 点击事件

  • 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>事件修饰符</h1><h2> prevent 阻止默认事件 </h2><a target="_blank" href="http://www.baidu.com"  @click="showTip">点我提示信息</a> </div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示      new Vue({el:'#root', data:{ name:"菜逼"},methods: {showTip(e){console.log("你好 " + this.name)}},});</script>
</html>
  • 效果
  1. 控制台输出 : 你好 菜逼
  2. 新标签页打开: 百度首页
    在这里插入图片描述

想禁止超链接的默认跳转

  • 解决办法
    • 调用事件的阻止默认操作方法 preventDefault
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script></head><body><!-- 准备一个容器 --><div id="root"><h1>事件修饰符</h1><h2> prevent 阻止默认事件 </h2><a target="_blank" href="http://www.baidu.com"  @click="showTip">点我提示信息</a> </div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示      new Vue({el:'#root', data:{ name:"菜逼"},methods: {showTip(e){e.preventDefault(); // 阻止默认事件方法console.log("你好 " + this.name)}},});</script>
</html>
  • 效果
  1. 控制台输出:你好 菜逼
  2. 不打开新标签页跳转百度首页

在这里插入图片描述

  • 简写

@click="showTip" => @click.prevent="showTip"

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>事件修饰符</h1><h2> prevent 阻止默认事件 </h2><a target="_blank" href="http://www.baidu.com"  @click.prevent="showTip">点我提示信息</a> </div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示      new Vue({el:'#root', data:{ name:"菜逼"},methods: {showTip(e){// e.preventDefault(); // 阻止默认事件方法console.log("你好 " + this.name)}},});</script>
</html>

stop (阻止事件冒泡)

DIV 及其 子元素 Button 均包含点击事件

  • 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>事件修饰符</h1><h2> stop 阻止事件冒泡 </h2><div @click="showDiv"><button @click="showButton">点我提示信息</button></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示      new Vue({el:'#root', data:{ name:"菜逼"},methods: {showDiv(e){console.log("你好 Div")},showButton(e){console.log("你好 Button")}},});</script>
</html>
  • 效果
  1. 点击按钮, 输出: 你好 Button
  2. div上的点击事件也触发了,输出: 你好 Div

在这里插入图片描述

想禁止触发 Div 的点击事件

  • 解决办法
    • 调用事件的阻止事件冒泡方法 stopPropagation
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>事件修饰符</h1><h2> stop 阻止事件冒泡 </h2><div @click="showDiv"><button @click="showButton">点我提示信息</button></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示      new Vue({el:'#root', data:{ name:"菜逼"},methods: {showDiv(e){console.log("你好 Div")},showButton(e){e.stopPropagation();// 阻止事件冒泡console.log("你好 Button")}},});</script>
</html>
  • 效果

点击按钮, 只输出: 你好 Button
在这里插入图片描述

  • 简写

@click="showButton" => @click.stop="showButton"

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>事件修饰符</h1><h2> stop 阻止事件冒泡 </h2><div @click="showDiv"><button @click.stop="showButton">点我提示信息</button></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示      new Vue({el:'#root', data:{ name:"菜逼"},methods: {showDiv(e){console.log("你好 Div")},showButton(e){console.log("你好 Button")}},});</script>
</html>

once (只触发一次)

  • 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script></head><body><div id="root"><h1>事件修饰符</h1><h2> once 只触发一次 </h2><div @click="showDiv"><button @click.once="showButton">点我提示信息</button></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示      new Vue({el:'#root', data:{ name:"菜逼"},methods: {showButton(e){console.log("你好 Button")}},});</script>
</html>
  • 效果

多次点击,只输出一次:你好 Button

在这里插入图片描述

capture (使用事件的捕获模式)

Div1、2嵌套且均包含点击事件

  • 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script><style>*{margin-top: 20px;}.div1{padding: 5px;background-color: gray;}.div2{padding: 5px;background-color: red;}</style></head><body><div id="root"><h1>事件修饰符</h1><h2> capture 使用事件的捕获模式 </h2><div class="div1"  @click="showMsg('div1')">div1<div class="div2"  @click="showMsg('div2')">div2</div></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示      new Vue({el:'#root', data:{ name:"菜逼"},methods: {showMsg(msg){console.log("你好 " + msg)}},});</script>
</html>
  • 效果
  1. 事件的捕获是 从外到内 div1 -> div2
  2. 事件的冒泡是 从内到外 div2 -> div1·
  3. 因此先输出 你好 div2 再输出 你好 div1

在这里插入图片描述

想让按照事件捕获顺序触发事件

  • 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script><style>*{margin-top: 20px;}.div1{padding: 5px;background-color: gray;}.div2{padding: 5px;background-color: red;}</style></head><body><div id="root"><h1>事件修饰符</h1><h2> capture 使用事件的捕获模式 </h2><div class="div1"  @click.capture="showMsg('div1')">div1<div class="div2"  @click="showMsg('div2')">div2</div></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示      new Vue({el:'#root', data:{ name:"菜逼"},methods: {showMsg(msg){console.log("你好 " + msg)}},});</script>
</html>
  • 效果
  1. @click="showMsg('div1')" => @click.capture="showMsg('div1')"
  2. 开启了捕获模式,捕获时就调用方法
  3. 先输出 你好 div1 再输出 你好 div2

在这里插入图片描述

self (只有event.target是自己时才调用)

DIV 及其 子元素 Button 均包含点击事件

  • 代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script><style>*{margin-top: 20px;}.div1{padding: 5px;background-color: gray;}</style></head><body><div id="root"><h1>事件修饰符</h1><h2> self 只有event.target是自己时才触发事件 </h2><div class="div1" @click="showDiv"><button @click="showButton">点我提示信息</button></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示      new Vue({el:'#root', data:{ name:"菜逼"},methods: {showDiv(e){console.log("你好 Div")console.log("div的event.target->",e.target)},showButton(e){console.log("你好 Button")}},});</script>
</html>
  • 效果
  1. 先输出 你好 Button
  2. 再输出 你好 Div
  3. 输出div触发事件的target是 <button >点我提示信息</button> 。(因为是点击按钮的冒泡事件)

在这里插入图片描述

想不是点击div自己就不触发事件

  • 代码

@click="showDiv" => @click.self="showDiv"

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script><style>*{margin-top: 20px;}.div1{padding: 5px;background-color: gray;}</style></head><body><div id="root"><h1>事件修饰符</h1><h2> self 只有event.target是自己时才触发事件 </h2><div class="div1" @click.self="showDiv"><button @click="showButton">点我提示信息</button></div></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示      new Vue({el:'#root', data:{ name:"菜逼"},methods: {showDiv(e){console.log("你好 Div")console.log("div的event.target->",e.target)},showButton(e){console.log("你好 Button")}},});</script>
</html>
  • 效果

只输出 你好 Button div的点击事件没有触发(变向的阻止事件冒泡)

在这里插入图片描述

passive (事件行为立即执行,无需等待回调执行完成)

  • 代码

鼠标滚轮事件 @wheel

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script><style>* {margin-top: 20px;}.list {height: 200px;width: 200px;background-color: gray;overflow: auto;}li {height: 100px;}</style></head><body><div id="root"><h1>事件修饰符</h1><h2>passive 默认事件行为立即执行,无需等待回调执行完成</h2><ul class="list" @wheel="load"><li>a</li><li>b</li><li>c</li><li>d</li></ul></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示new Vue({el:'#root',data:{name:"菜逼"},methods: {load(e){for(let i = 0; i<10000; i++){setTimeout(1000);console.log("睡了"+(i+1)+ "秒")}console.log("执行完了");}}});</script>
</html>
  • 效果

发现必须等到最终输出 执行完了 滚动条才下移

在这里插入图片描述

  • 想让滚动条直接下移

@wheel="load" => @wheel.passive="load"

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script><style>* {margin-top: 20px;}.list {height: 200px;width: 200px;background-color: gray;overflow: auto;}li {height: 100px;}</style></head><body><div id="root"><h1>事件修饰符</h1><h2>passive 默认事件行为立即执行,无需等待回调执行完成</h2><ul class="list" @wheel.passive="load"><li>a</li><li>b</li><li>c</li><li>d</li></ul></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示new Vue({el:'#root',data:{name:"菜逼"},methods: {load(e){for(let i = 0; i<10000; i++){setTimeout(1000);console.log("睡了"+(i+1)+ "秒")}console.log("执行完了");}}});</script>
</html>

在这里插入图片描述

  • 使用 @scroll 则没有这个问题

@wheel.passive="load" => @scroll="load"

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>事件修饰符</title><!--  引入Vue  --><script type="text/javascript" src="../js/vue.js"></script><style>* {margin-top: 20px;}.list {height: 200px;width: 200px;background-color: gray;overflow: auto;}li {height: 100px;}</style></head><body><div id="root"><h1>事件修饰符</h1><h2>passive 默认事件行为立即执行,无需等待回调执行完成</h2><ul class="list" @scroll="load"><li>a</li><li>b</li><li>c</li><li>d</li></ul></div></body><script type="text/javascript">Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示new Vue({el:'#root',data:{name:"菜逼"},methods: {load(e){for(let i = 0; i<10000; i++){setTimeout(1000);console.log("睡了"+(i+1)+ "秒")}console.log("执行完了");}}});</script>
</html>

在这里插入图片描述

  • 特殊说明

passive 常用于 APP 或者 平板之类的应用优化使用
并不是所有的事件均使用,需具体事件具体分析

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

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

相关文章

LeetCode --- 156双周赛

题目列表 3541. 找到频率最高的元音和辅音 3542. 将所有元素变为 0 的最少操作次数 3543. K 条边路径的最大边权和 3544. 子树反转和 一、找到频率最高的元音和辅音 分别统计元音和辅音的出现次数最大值&#xff0c;然后相加即可&#xff0c;代码如下 // C class Solution {…

告别 pip:使用 uv 加速你的 Python 包管理

使用 uv:更快的 Python 包管理工具 随着 Python 生态的演进,包管理工具也在不断升级迭代。uv 是 Astral(同样维护 ruff 的团队)推出的下一代 Python 包与项目管理器,主打 单一可执行文件、极致性能,可在多数场景下取代 pip、pip-tools、pipx 与 virtualenv 等传统工具,…

MATLAB学习笔记(七):MATLAB建模城市的雨季防洪排污的问题

使用 MATLAB 对城市雨季防洪排污问题进行建模与仿真&#xff0c;需要结合数学模型、工程经验和 MATLAB 的数值计算、数据可视化及优化工具。以下是详细的步骤指南&#xff0c;包含实际案例和代码示例&#xff1a; 一、问题分析与建模框架 1. 问题拆解 • 核心目标&#xff1a; …

以项目的方式学QT开发C++(二)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!

API 描述 函数原型 参数说明 push_back() 在 list 尾部 添加一个元素 void push_back(const T& value); value &#xff1a;要添 加到尾部的元 素 这个示例演示了如何创建 std::list 容器&#xff0c;并对其进行插入、删除和迭代操作。在实际应用中&am…

08 web 自动化之 PO 设计模式详解

文章目录 一、什么是 POM二、如何基于 POM 进行自动化框架架构&#xff1f;1、base 层封装2、pageobjects 层封装3、TestCases 层封装 三、元素和方法分离&数据分离1、哪些部分可以进行分离2、示例代码 四、总结 一、什么是 POM POM page object model 页面对象模型 WEB 自…

将 JSON 批量转换为 XML:深度解析与完整实现指南

在数据科学与机器学习项目中&#xff0c;数据预处理始终扮演着不可或缺的角色。尤其当你面对多类别图像标注任务&#xff0c;而标注数据却是以 JSON 形式存在&#xff0c;而目标检测模型却偏好 VOC 格式的 XML 时&#xff0c;这个转换过程就变得极为关键。 本文将带你深入解读…

AlphaEvolve:基于Gemini的算法发现与优化综合报告

引言 • 本报告分析Google DeepMind于2025年5月14日正式发布的AlphaEvolve技术。• AlphaEvolve是一种由Gemini大型语言模型驱动的进化式编码代理&#xff0c;专注于通用算法的发现和优化。• 报告深入探讨AlphaEvolve的技术原理、实际应用及其对未来AI和算法研究的潜在影响。…

排序算法之高效排序:快速排序,归并排序,堆排序详解

排序算法之高效排序&#xff1a;快速排序、归并排序、堆排序详解 前言一、快速排序&#xff08;Quick Sort&#xff09;1.1 算法原理1.2 代码实现&#xff08;Python&#xff09;1.3 性能分析 二、归并排序&#xff08;Merge Sort&#xff09;2.1 算法原理2.2 代码实现&#xf…

Android开发——轮播图引入

Android开发——轮播图引入 一、前期准备与依赖引入二、配置启动类(AndroidManifest.xml)三、构造启动类(MainActivity.java)四、配置布局文件(activity_main.xml)五、最终效果与扩展方向一、前期准备与依赖引入 在开始引入轮播图功能前,需确保已正确搭建Android开发环境…

[逆向工程]C++实现DLL卸载(二十六)

[逆向工程]C实现DLL卸载&#xff08;二十六&#xff09; 引言 DLL注入&#xff08;DLL Injection&#xff09;是Windows系统下实现进程间通信、功能扩展、监控调试的核心技术之一。本文将从原理分析、代码实现、实战调试到防御方案&#xff0c;全方位讲解如何用C实现DLL注入&…

lesson01-PyTorch初见(理论+代码实战)

一、初识PyTorch 二、同类框架 PyTorchVSTensorFlow 三、参数 对比 四、PyTorch生态 四、常用的网络层 五、代码分析 import torch from torch import autogradx torch.tensor(1.) a torch.tensor(1., requires_gradTrue) b torch.tensor(2., requires_gradTrue) c tor…

STM32中的DMA

DMA介绍 什么是DMA? DMA&#xff08;Direct Memory Access&#xff0c;直接存储器访问&#xff09;提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于CPU&#xff0c;在这个时间中&#xff0c;CPU对于内存…

聊聊JetCache的缓存构建

序 本文主要研究一下JetCache的缓存构建 invokeWithCached com/alicp/jetcache/anno/method/CacheHandler.java private static Object invokeWithCached(CacheInvokeContext context)throws Throwable {CacheInvokeConfig cic context.getCacheInvokeConfig();CachedAnnoC…

c#队列及其操作

可以用数组、链表实现队列&#xff0c;大致与栈相似&#xff0c;简要介绍下队列实现吧。值得注意的是循环队列判空判满操作&#xff0c;在用链表实现时需要额外思考下出入队列条件。 设计头文件 #ifndef ARRAY_QUEUE_H #define ARRAY_QUEUE_H#include <stdbool.h> #incl…

开源项目实战学习之YOLO11:12.3 ultralytics-models-sam-encoders.py源码分析

👉 点击关注不迷路 👉 点击关注不迷路 👉 另外,前些天发现了一个巨牛的AI人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。感兴趣的可以点击相关跳转链接。 点击跳转到网站。 ultralytics-models-sam 1.sam-modules-encoders.pyblocks.py: 定义模型中的各…

STM32 | FreeRTOS 消息队列

01 一、概述 队列又称消息队列&#xff0c;是一种常用于任务间通信的数据结构&#xff0c;队列可以在任务与任务间、中断和任务间传递信息&#xff0c;实现了任务接收来自其他任务或中断的不固定长度的消息&#xff0c;任务能够从队列里面读取消息&#xff0c;当队列中的消…

Java 安全漏洞扫描工具:如何快速发现和修复潜在问题?

Java 安全漏洞扫描工具&#xff1a;如何快速发现和修复潜在问题&#xff1f; 在当今的软件开发领域&#xff0c;Java 作为一种广泛使用的编程语言&#xff0c;其应用的规模和复杂度不断攀升。然而&#xff0c;随着应用的拓展&#xff0c;Java 应用面临的潜在安全漏洞风险也日益…

Python绘制克利夫兰点图:从入门到实战

Python绘制克利夫兰点图&#xff1a;从入门到实战 引言 克利夫兰点图&#xff08;Cleveland Dot Plot&#xff09;是一种强大的数据可视化工具&#xff0c;由统计学家William Cleveland在1984年提出。这种图表特别适合展示多个类别的数值比较&#xff0c;比传统的条形图更直观…

LVGL- Calendar 日历控件

1 日历控件 1.1 日历背景 lv_calendar 是 LVGL&#xff08;Light and Versatile Graphics Library&#xff09;提供的标准 GUI 控件之一&#xff0c;用于显示日历视图。它支持用户查看某年某月的完整日历&#xff0c;还可以实现点击日期、标记日期、导航月份等操作。这个控件…

多指标组合策略

该策略(MultiConditionStrategy)是一种基于多种技术指标和市场条件的交易策略。它通过综合考虑多个条件来生成交易信号,从而决定买入或卖出的时机。 以下是对该策略的详细分析: 交易逻辑思路 1. 条件1:星期几和价格变化判断 - 该条件根据当前日期是星期几以及价格的变化…