用原生JS實作簡易彈出選項 Simple Option Menu
今天來用原生JS搭配CSS來實現簡易的彈出選項,大致上說明一下原理,主要是利用CSS有一個後選擇器搭配input checkbox就可以做出一個純css的開關,然後用JS去控制blur的事件使整個選單在操作上更完整
關於後選擇器的部分,網路上有很多不錯的文章可以直接過去參考,這邊就不贅述了
CSS沒有極限- Checkbox的妙用 卡斯伯Blog - 前端,沒有極限
首先第一步,我們先建構出基本的一些元件
1 | <div> |
給checkbox一個id好讓label綁定在它上面,然後讓checkbox隱藏,這樣看起來就像是用按鈕去開關
1 | input.option-btn { |
再來就是把後選擇器的style設定上去
1 | input.option-btn ~ .menu { |
然後裝飾一下,純css的開關菜單就完成了
See the Pen Simple Option Menu Demo1 by kami8112 (@kami25565) on CodePen.
不過這個菜單只有點開關才可以去開啟關閉,我們可能希望可以讓他點外面的時候,也可以關閉菜單,所以要加上一些JS事件讓他支援這個功能
See the Pen Simple Option Menu Demo2 by kami8112 (@kami25565) on CodePen.
這邊主要是在menu加上了blur事件,但是這邊有一個地方要注意的是,div本身並不支援focus跟blur,但是只要幫div加上tabindex他就能有focus和blur事件的監聽
然後是可以看到我們checkbox有綁定一個change的事件,這邊這樣做是因為,blur的前提是你要先focus這個dom,但是我們按按鈕並不會focus到menu,所以才需要監聽checkbox被開啟的時候順便focus menu,這樣才不會按完按鈕,然後按外面卻沒有反應
再來就是我們會希望菜單是浮在上面的,而不是像上面的範例會占用到實際的位置,這邊直接加上position: absolute來補全就ok了
See the Pen Simple Option Menu Demo3 by kami8112 (@kami25565) on CodePen.
到這邊簡易的可開關彈出選單就完成了!!!