中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是JavaScript冒泡和捕獲

發布時間:2020-07-11 10:05:44 來源:億速云 閱讀:143 作者:Leah 欄目:web開發

這期內容當中小編將會給大家帶來有關什么是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 id="lv1" class="level">
    <div id="lv2" class="level">
        <div id="lv3" class="level">
            <div id="lv4" class="level">

            </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冒泡和捕獲了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吴桥县| 包头市| 巴彦县| 通江县| 乐山市| 共和县| 嘉鱼县| 团风县| 顺平县| 上林县| 巴林右旗| 六盘水市| 遂昌县| 凤山县| 潼关县| 沈阳市| 临沭县| 六枝特区| 疏勒县| 鞍山市| 巨野县| 韶关市| 定结县| 江安县| 鹤山市| 兖州市| 武隆县| 南雄市| 嵊州市| 永济市| 南江县| 嘉善县| 平谷区| 平乐县| 永嘉县| 宽甸| 崇仁县| 碌曲县| 沂水县| 贵州省| 津南区|