對瀏覽器事件機制的理解

瀏覽器事件是什么:

事件是用戶操作網頁時發生的交互動作,比如 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
英文地址,請注明出處:http://en.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操作。 批量更新也是利用鏈…