首頁 web前端 js教程 JavaScript冒泡與捕捉的知識介紹(附程式碼)

JavaScript冒泡與捕捉的知識介紹(附程式碼)

Mar 11, 2019 pm 04:22 PM
html javascript

這篇文章帶給大家的內容是關於JavaScript冒泡和捕獲的知識介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

JS 冒泡和捕獲是怎麼回事

冒泡和捕獲是指在元素上的事件被觸發的時候,js 傳遞事件的兩種方向,或者說過程。

前言:

如,有這麼一個頁面和js 方法

JavaScript冒泡與捕捉的知識介紹(附程式碼)

Less: 我用less寫的,如果沒有less 環境,可以無視這段。
.level {
  padding: 50px 80px;
}

.level-template(@level: 1, @color: #fff){
  background-color: darken( @color , 5% * @level);
}

#lv1{ .level-template(1)}
#lv2{ .level-template(2)}
#lv3{ .level-template(3)}
#lv4{ .level-template(4)}
登入後複製
HTML
<div>
    <div>
        <div>
            <div>

            </div>
        </div>
    </div>
</div>
登入後複製
JS
function $(id) {
    return document.getElementById(id);
}

window.onload = () => {
    $('lv1').addEventListener("click",()=>{console.log('lv1')},true);
    $('lv2').addEventListener("click",()=>{console.log('lv2')},true);
    $('lv3').addEventListener("click",()=>{console.log('lv3')},true);
};
// 上面的 () => {} 为 ES6 的匿名方法的定义方式
// 等同于
function () {
    console.log('lv1')
}
登入後複製

上面的js 做的事:
在頁面載入的時候,給三個div添加click  監聽方法,自己被點擊的時候會在console 中輸出自己的id 值。

頁的結構是這樣的 lv1 包含 lv2,lv2 又包含 lv3,當點選 lv3 的時候,其實也點選了 lv2 與 lv1,因為 lv3 在 lv2 內部,點選 lv3 的時候,自然也點選了lv2 和 lv1,也就是說,點選 lv3 的時候,會觸發三個 click 事件。
至於這三個事件觸發的順序,就是所謂的 冒泡  和 捕捉。

事件觸發經過的三個階段:

  1. 擷取階段:先由文件的根節點document 往事件觸發對象,從外向內捕捉事件物件;
  2. 定位目標:尋找到目標事件位置(事發地),觸發事件;
  3. 冒泡階段:再從目標事件位置往文件的根節點方向回溯,從內向外冒泡事件物件。

1. 捕獲階段

如上面的例子,在 lv3 被點擊的時候,js 會從文件的最上層開始,由外向內尋找點擊事件的起源,也就是 lv3。那麼這個由外而內的過程就是 lv1 --> lv2 --> lv3,這三個 p 的 click 事件依序被觸發。
這個觸發的方向就是捕捉的方向。

2. 冒泡階段

在找到被點擊的lv3 之後,事件向上傳遞,過程是 lv3 --> lv2 --> lv1,此時依序觸發 lv3、lv2 、lv1 的 click 事件,這個由內向外的觸發過程就稱為冒泡

再回看一下最常用的事件綁定方法的格式:

element.addEventListener(event, function, useCapture)
登入後複製

這裡面,useCapture 是個布林值,用於定義事件是在冒泡階段觸發,還是在捕獲階段觸發,預設值是 false,代表在冒泡時觸發。

此時你就會知道上面那個例子裡定義的click 方法是在 捕獲階段 執行,那麼返回的結果就是

lv1
lv2
lv3
登入後複製

如果最上面的例子,onload 內容是這樣的

 window.onload = () => {
        $('lv1').addEventListener("click",()=>{console.log('lv1')},false);
        $('lv2').addEventListener("click",()=>{console.log('lv2')},false);
        $('lv3').addEventListener("click",()=>{console.log('lv3')},false);
    };
登入後複製

那麼也就是說,click 事件在冒泡階段觸發,回傳的結果就是

lv3
lv2
lv1
登入後複製

總結


###################################### #####冒泡和捕獲的關係,只會出現在包含和被包含的結構中,兄弟關係是不會有這種關係的。 ###冒泡和捕獲只是方向的不同而已。 ##########

以上是JavaScript冒泡與捕捉的知識介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1230
24
HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

See all articles