1. 程式人生 > 程式設計 >JavaScript的事件流你瞭解嗎

JavaScript的事件流你瞭解嗎

目錄
  • 1. 什麼是事件流 ?
  • 2. 事件流模型
    • 2.1) 事件冒泡
    • 2.2) 事件捕獲
  • 3. DOM 事件流
    • 總結

      1. 什麼是事件流 ?

      在學習事件流之前我們先看看什麼是事件 ?

      事件代表文件或瀏覽器視窗中某個有意義的時刻

      即使用者與頁面的互動動作
      (如使用者點選元素時,滑鼠移動到某個元素上等等)

      • 事件的作用

      HTML的互動就是通過事件實現的

      • 那麼事件流是什麼呢 ?

      頁面接受事件的順序

      2. 事件流模型

      2.1) 事件冒泡

      事件被定義為從最具體的元素(DOM 樹的葉子)開始觸發,然後向上傳播至沒有那麼具體的元素(DOM 樹的根節點)

      通過一個例子理解一下:

      <!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>點選</div>
      </body>
      </html>
      

      當點選<div>元素後,會觸發click事件;
      然後click事件沿DOM樹一路向上,在經過的結點依次觸發,直至document
      <div>www.cppcns.com—><body>—><html>—>dCtIiRwHNXEocument

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

      在這裡插入圖片描述

      2.2) 事件捕獲

      從最不具體的節點(DOM 樹的根節點)最先收到事件,而最具體的節點(DOM 樹的葉子 )應該最後收到事件

      通過一個例子來理解一下:

      <!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>點選</div>
      </body>
      </html>
      

      在點選<div>後,click事件首先由document捕獲;
      然後沿DOM樹一路向下傳播,直至達到目標元素<div>
      document—><html>—><body>—><div>

      通過下圖來理解一下:

      在這裡插入圖片描述

      根據它的特點,它有著如下作用:

      在事件達到最終目標前攔截事件

      Tips:

      由於一些舊版本瀏覽器不支援事件捕獲,通常建議使用事件http://www.cppcns.com冒泡。

      3. DOM 事件流

      DOM2 Events 規定事件流分為 3 個階段:

      事件捕獲、達到目標和事件冒泡

      事件捕獲最先發生,為提前攔截事件提供了可能
      然後實際的目標元素接受到了事件
      最後事件冒泡(最遲要在這個階段響應事件)

      通過一個例子理解一下:

      <!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>點選</div>
      </body>
      </html>
      

      點選<div>元素後,以如下圖所示的順序觸發事件

      在這裡插入圖片描述

      DOM事件流中,實際的目標元素在捕獲階段不會接收到事件(捕獲階段從document<body>就結束了)。

      捕獲階CtIiRwHNXE段:document—><html>—><body>即圖中的 1,2,3;達到目標:即在<div>上觸發事件,即圖中的 4 (通常在事件處理時,被認為是冒泡階段的一部分);冒泡階段:<body>—><html>—>document即圖中的 5,6,7;

      Tips:

      雖然 DOM2 Events 規範明確捕獲階段不命中目標事件,但現代瀏覽器都會在捕獲階段在事件目標上觸發事件。
      所以,在事件目標上有兩個機會來處理事件。

      總結

      本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注我們的更多內容!