溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript事件流的示例分析

發(fā)布時(shí)間:2022-03-04 09:56:01 來源:億速云 閱讀:111 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹JavaScript事件流的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

    1.什么是事件流 ?

    在學(xué)習(xí)事件流之前我們先看看什么是事件 ?

    事件代表文檔或?yàn)g覽器窗口中某個(gè)有意義的時(shí)刻

    即用戶與頁面的交互動(dòng)作

    (如用戶點(diǎn)擊元素時(shí),鼠標(biāo)移動(dòng)到某個(gè)元素上等等)

    事件的作用

    JavaScript 與 HTML 的交互就是通過事件實(shí)現(xiàn)的

    那么事件流是什么呢 ?

    頁面接受事件的順序

    2.事件流模型

    2.1) 事件冒泡

    事件被定義為從最具體的元素(DOM 樹的葉子)開始觸發(fā),然后向上傳播至沒有那么具體的元素(DOM 樹的根節(jié)點(diǎn))

    通過一個(gè)例子理解一下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>事件冒泡</title>
    </head>
    <body>
        <div>點(diǎn)擊</div>
    </body>
    </html>

    當(dāng)點(diǎn)擊 <div> 元素后,會(huì)觸發(fā) click 事件;

    然后 click 事件沿 DOM 樹一路向上,在經(jīng)過的結(jié)點(diǎn)依次觸發(fā),直至 document;

    即 <div> &mdash;> <body> &mdash;> <html> &mdash;> document

    可以通過下圖來理解一下:

    JavaScript事件流的示例分析

    2.2) 事件捕獲

    從最不具體的節(jié)點(diǎn)(DOM 樹的根節(jié)點(diǎn))最先收到事件,而最具體的節(jié)點(diǎn)(DOM 樹的葉子 )應(yīng)該最后收到事件

    通過一個(gè)例子來理解一下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>事件捕獲</title>
    </head>
    <body>
        <div>點(diǎn)擊</div>
    </body>
    </html>

    在點(diǎn)擊 <div> 后, click 事件首先由 document 捕獲;

    然后沿 DOM 樹一路向下傳播,直至達(dá)到目標(biāo)元素 <div>;

    即 document &mdash;> <html> &mdash;> <body> &mdash;> <div>

    通過下圖來理解一下:

    JavaScript事件流的示例分析

    根據(jù)它的特點(diǎn),它有著如下作用:

    在事件達(dá)到最終目標(biāo)前攔截事件

    Tips:

    由于一些舊版本瀏覽器不支持事件捕獲,通常建議使用事件冒泡。

    3.&ensp;DOM 事件流

    DOM2 Events 規(guī)定事件流分為 3 個(gè)階段:

    事件捕獲、達(dá)到目標(biāo)和事件冒泡

    事件捕獲最先發(fā)生,為提前攔截事件提供了可能,然后實(shí)際的目標(biāo)元素接受到了事件,最后事件冒泡(最遲要在這個(gè)階段響應(yīng)事件)

    通過一個(gè)例子理解一下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>DOM 事件流</title>
    </head>
    <body>
        <div>點(diǎn)擊</div>
    </body>
    </html>

    點(diǎn)擊<div> 元素后,以如下圖所示的順序觸發(fā)事件

    JavaScript事件流的示例分析

    在 DOM 事件流中,實(shí)際的目標(biāo)元素在捕獲階段不會(huì)接收到事件(捕獲階段從 document 到 <body> 就結(jié)束了)。

    • 捕獲階段: document &mdash;> <html> &mdash;> <body> 即圖中的 1, 2, 3;

    • 達(dá)到目標(biāo):即在 <div> 上觸發(fā)事件,即圖中的 4 (通常在事件處理時(shí),被認(rèn)為是冒泡階段的一部分);

    • 冒泡階段:<body> &mdash;> <html> &mdash;> document 即圖中的 5, 6, 7;

    Tips:

    雖然 DOM2 Events 規(guī)范明確捕獲階段不命中目標(biāo)事件,但現(xiàn)代瀏覽器都會(huì)在捕獲階段在事件目標(biāo)上觸發(fā)事件。所以,在事件目標(biāo)上有兩個(gè)機(jī)會(huì)來處理事件。

    以上是“JavaScript事件流的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI