
主題目標
初始文檔index-start.html提供了3個尺寸不一的元素,本次挑戰是一次學習任務,主要了解學習DOM的事件機制,包括事件捕獲,事件冒泡,單次觸發等。先捕獲,再冒泡觀察,搭配 Console 觀看。
作品網址:
處理步驟
首先觀察one two three之層級關係
<div class="one">
<div class="two">
<div class="three">
</div>
</div>
</div>步驟1
建立三組 Div ,以及 click 觸發,觀察觸發順序
const divs =document.querySelectorAll('div');
/**
* 顯示目前觸發的 DOM
*
* @param {any} e
*/
function logText(e){
console.log(this.classList.value);
}
divs.forEach(div => div.addEventListener('click',logText));其結果會是 three > two > one

步驟2
變更為”捕獲“動作
const divs =document.querySelectorAll('div');
/**
* 顯示目前觸發的 DOM
*
* @param {any} e
*/
function logText(e){
console.log(this.classList.value);
}
// 變更為捕獲
divs.forEach(div => div.addEventListener('click',logText,{capture:true}));其結果會是 one > two > three

步驟3
其後增加使用 once 參數,此參數將使觸發進行一次
//使用 once 參數
const button = document.querySelector('button');
button.addEventListener('click', () => {
console.log('Click!!!');
}, {
once: true
});只能點選觸發一次

特別技術、函式
<HTML>
<CSS>
<JavaScript>
EventTarget.addEventListener()
EventTarget.addEventListener() 方法将指定的监听器注册到 EventTarget 上,当该对象触发指定的事件时,指定的回调函数就会被执行。 事件目标可以是一个文档上的元素 Element,Document和Window或者任何其他支持事件的对象 (比如 XMLHttpRequest)。
參考資料:
JS30紀錄 25-Event Capture, Propagation, Bubbling and Once:https://shunnien.github.io/2018/01/27/Javascript30days-25/
Js 30 day 中文指南:https://github.com/soyaine/JavaScript30
