Open Lu-yeom opened 3 years ago
日期:110年5月26日(星期三)20:30~22:30 今日進度:[FE102] 前端必備:JavaScript
課程筆記: 一、eventListener(監聽事件) 與 callback function
較常使用匿名函式,直接把函式寫入: const element = document.querySelector('#block') element.addEventListener(‘click’, onClick() { alaert(‘click!’) })
二、詳細講解 callback function callback funciton 為執行 addEventListener 背後的概念。 它的目的就是為了不要讓其他事情被阻塞 (block),而延伸出來的方式。 概念有點像是美食街的呼叫器,『好了後再叫我』!
三、event(e) 是什麼? const element = document.querySelector('#block') element.addEventListener('click',function(e) { console.log(e) }) e代表MouseEvent 範例:
日期:110年5月27日(星期四)15:00~17:00、20:00~22:30 今日進度:[FE102] 前端必備:JavaScript
課程筆記: 一、別向上級回報:stopPropagation 先以捕獲與冒泡的機制來說明: addEvent('.outer') addEvent('.inner') addEvent('.btn')
function addEvent(className) { document.querySelector(className) .addEventListener('click', function(e){ console.log(className, '冒泡', e.eventPhase) }, false) // false : 放在冒泡階段上 (預設)
document.querySelector(className)
.addEventListener('click', function(e){
console.log(className, '捕獲', e.eventPhase)
}, true) // true : 放在捕獲階段上
} 以上例子為「先冒泡再捕獲」,如果要阻止「冒泡」: addEvent('.outer') addEvent('.inner')
function addEvent(className) { document.querySelector(className) .addEventListener('click', function(e){ console.log(className, '冒泡', e.eventPhase) })
document.querySelector(‘.btn’)
.addEventListener('click', function(e) {
e.stopPropagation() //點擊btn,阻止事件傳遞
console.log(‘.btn 冒泡’)
})
如果是要在「捕獲」階段就阻止事件傳遞: addEvent('.outer') addEvent('.inner')
window.addEventListener(‘click’, function(e) { e.stopPropagation() }, true) //點選outer、inner、btn都不會傳遞事件
function addEvent(className) { document.querySelector(className) .addEventListener('click', function(e){ console.log(className, '冒泡', e.eventPhase) })
document.querySelector(‘.btn’)
.addEventListener('click', function(e) {
e.stopPropagation() //點擊btn,阻止事件傳遞
console.log(‘.btn 冒泡’)
})
但如果同一個節點尚有其他相同的事件,還是會觸發,如果也想阻止傳遞:
document.querySelector(‘.btn’)
.addEventListener('click', function(e) {
e.stopImmediatePropagation() //立刻阻止其他相同事件
console.log(‘.btn click1’)
})
document.querySelector(‘.btn’)
.addEventListener('click', function(e) {
e.stopPropagation()
console.log(‘.btn click2’)
})
二、事件代理 Delegation 假如說我們有 100 li,若為每個 li 都添加事件,會造成 DOM 抓取次數太多,瀏覽器效能降低。為了不要重複做一樣的事情,我們可用事件代理方式!
而事件代理是利用「事件傳遞的冒泡原理」,將子元素的監聽事件綁在父元素上。
例如:當我們在最外層添加點擊事件時,裡面的 ul、 li 、a 的點擊事件都會冒泡到最外層的節點上,委託它代理執行事件。
其中好處是: 若有很多子元素,就無需一個一個綁定監聽事件。 動態新增來的子元素,也會冒泡到上層,因此不怕沒監聽到它。
三、綜合示範:簡易密碼產生器 <!DOCTYPE HTML>
四、綜合示範:動態表單通訊錄
日期:110年5月24日(星期一)20:00~22:30 今日進度:[FE102] 前端必備:JavaScript
課程筆記: 一、如何在瀏覽器上執行Javascript? (一)在哪裡執行?可用node.js編寫html,在
二、DOM(文件物件模型)是什麼? 瀏覽器提供了一個橋樑,讓 JavaScript 去改變畫面上的東西,簡單理解就是將Document 轉換成 Object。
三、如何選到想要的元素:getElement (一)const elements = document.getElementsByTagName('tagName') 例: