iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0
自我挑戰組

JavaScript基礎介紹 for 30天系列 第 20

第二十天 JavaScript 事件機制

  • 分享至 

  • xImage
  •  

JavaScript 是由事件驅動的程式語言,瀏覽器讀取完 JavaScript 事件相關的程式碼後,需要等到事件被觸發才會執行。生活中的例子像是當門鈴響了(事件被觸發) -> 去開門(做對應的事情)。

事件流程
指的就是網頁元素接收事件的順序。
而可以分成兩種機制:

  1. 事件冒泡
  2. 事件捕獲

事件冒泡指的是從啟動事件的元素節點開始,一層一層網上傳遞直到整個網頁的根節點,就是 document。

<html>
    <head>
        <title>title</title>
    </head>
    <body>
        <div>click</div>
    </body>
</html>

當點擊 click 元素,在事件冒泡的機制裡,事件的順序會是:

  1. div
  2. body
  3. html
  4. document
    像這樣一層一層往上觸發,就是事件冒泡。

事件捕獲是指由下往上傳遞,與事件冒泡相反。
跟上面同一份 html 一樣,如果是在事件補獲的機制下,觸發的順序會是:

  1. document
  2. html
  3. body
  4. div

那如何知道當我們觸發事件的時候,是用事件冒泡還是事件捕獲呢?
其實這兩種都會執行!

我們可以用 addEventListener() 方法來綁定 click 事件來驗證事件的流程。

<div>
    <div id="parent">
        父元素
        <div id="child">子元素</div>
    </div>
</div>

var parent = document.getElementById('parent')
var child = document.getElementById('child')

//第三個參數 true / false 代表捕獲/冒泡機制

parent.addEventListener('click', function(){
    console.log('Parent Capturing')
}, true)

parent.addEventListener('click', function(){
    console.log('Parent Bubbling')
}, false)

child.addEventListener('click', function(){
    console.log('child Capturing')
}, true)

child.addEventListener('click', function(){
    console.log('child Bubbling')
}, false)

當點擊是子元素時,console.log 會印出觸發的順序為:

"Parent Capturing"
"Child Capturing"
"Child Bubbling"
"Parent Bubbling"

點父元素時,順序為:

"Parent Capturing"
"Parent Bubbling"

從上面的例子可以知道,點擊子元素時,父層的 Capturing 會先觸發,在到子層的 Capturing 或者是 Bubbling 事件,最後再回到父層 Bubbling 結束。

今天介紹 JavaScript 事件機制,希望大家對這些都有點收穫~ 我們明天見啦!


上一篇
第十九天 JavaScript 修改 DOM 節點的樣式
下一篇
第二十一天 JavaScript 事件綁定
系列文
JavaScript基礎介紹 for 30天24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言