這是專案上所提出的一個使用情境,不是很新穎的技術,但會是一個綜合使用體驗的安排,記錄一下該功能與語法的內容。使用到的技術與語法如下:
- jQuery function:
- fadeIn();
- fadeOut();
- fadeToggle();
- SCSS 預處理器。
- CSS3 function calc。
起源
PM 某天跑來這樣說:
這個頁面一開始看不到資訊頁內容,會有一個視窗蓋在畫面前面,要加上一個關閉按鈕,希望關閉後可以透過點擊按鈕再次叫出與關閉,資訊頁需要一個按鈕獨立控制。
整串聽完只聽到一直開開關關…
歸類有下方條件:
- 一開始有一個小視窗。
- 一開始資訊頁是看不見的。
- 會有一個按鈕可以開啟資訊頁。
- 會有一個按鈕可以控制小視窗頁開跟關。
版面處理
使用 CSS3 function calc 方式做規劃,分成兩邊,一邊為 width: calc(100% * 4 / 12);
,資訊頁為 width: calc(100% * 4 / 12);
,這個方法真的非常好用啊!
看一下 HTML 的結構分成三塊,兩個 button
,小視窗 .box
,資訊頁 .info
,
HTML
1 | <div class="container"> |
因為一開始只有小視窗 .box
,並且隱藏資訊頁 .info
,所以這邊會使用 display:none / block
來呈現。
另外要讓小視窗「蓋在」資訊頁上面,變使用 z-index
的順序來制訂,這邊使用 99 (我預定範圍為 1~99,使用最高的階層,避免未來維護時不小心被蓋過)。並使用 position: absolute;
將其絕對定位在瀏覽器,因為沒有特別寫 position:relative;
在別的地方,所以就會預設瀏覽器為父元素。
.box
1 | .box { |
.info
1 | .info { |
完成基本畫面設置後,就要透過 jQuery 來做互動效果。這次是要透過按鈕來做互動,所以先來看一下按鈕,
1 | <button class="toggleBtn">OPEN / CLOSE</button> |
先綁定到 .toggleBtn
並產生 click
事件,當點擊此按鈕時, .box
小視窗,會於 0.5 秒淡出,再次點擊會於 0.5 秒後淡入,透過 fadeToggle(填入時間參數);
便可以實現此功能。
1 | $(".toggleBtn").click(function () { |
接者綁定 .openInfoBtn
並產生 click
事件,當點擊此按鈕時,會產生兩種行為,淡入顯示, .box
便淡出消失,
1 | $(".openInfoBtn").click(function () { |
最後在 .box
小視窗中也有一個 close 按鈕,也綁定 click
事件,點擊按鈕後,視窗會於 0.5 秒後淡出消失。
1 | $(".closeBtn").click(function () { |
Codepen: https://codepen.io/hnzxewqw/pen/rNOddaX