這次的範例重點應該是在flex
,js部分反而前面都用過了。
自訂(新增)的樣式
1 | .panels{ |
推薦flex教學小遊戲:flexboxfroggy
flex排版真的很好用,用了會上癮。
讓它動起來吧
這次的範例意外的簡單,就當作複習吧
1 | const panels = document.querySelectorAll('.panel') |
我們在Day4的第六題有介紹到querySelectorAll
選取後得到的是一個NodeList
他不具陣列的所有功能。
但這邊我們仍可以用forEach去針對每個.panel
做事件觸發
因為效果需要他先click放大後,文字再出現,所以我們才使用兩個事件去觸發:click
、transitionend
。1
2panels.forEach(panel=>{panel.addEventListener('click',openHandler)})
panels.forEach(panel=>{panel.addEventListener('transitionend',activeHandler)})
我們在Day1的transitionend事件有介紹到,要記得:
transitionend會針對每一個屬性去觸發,如果有很多屬性記得做個簡易判斷:
1 if(e.propertyName !== "transform") return
重點
1 | const panels = document.querySelectorAll('.panel') |
直覺上會直接加上toggle('active')
,但我們加上console.log('go')
去觀察會得到:
go跑了兩次!!也就是說我們的acticv也toggle兩次,出現又馬上消失了。
所以為什麼transitionend
跑了兩次呢?我們console.log(e)來看看這兩次是什麼:
這驗證了我們講的:transitionend會針對每一個屬性去觸發
所以我們就挑一個propertyName來做執行就好了,加入一個判斷:1
if(e.propertyName !== 'font-size') return
就大功告成啦
…目前寫過最快最簡短的一天
程式碼
1 | const panels = document.querySelectorAll('.panel') |
不負責任聲明ಥ◡ಥ:
純屬個人筆記,每個範例都有不同的寫法,還有很多細節可以加入,有任何問題都歡迎提出一起研究哦,我會很感謝您的!- 2018.08.11