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.pswp.cn/web/80377.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80377.shtml
英文地址,請注明出處:http://en.pswp.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:星期幾和價格變化判斷 - 該條件根據當前日期是星期幾以及價格的變化…