Navigate back to the homepage

Day5: Flex Panels

JavaScript30
June 21st, 2021 · 1 min read

專案介紹: 練習 css flex 及 js 點擊圖片做展開效果

作品頁面: https://iris1114.github.io/javascript30/05_Flex-Panel-Gallery/index.html

1. 做法:

  • 用 flex 進行排版
  • 點擊圖片,新增 2 種效果
  • 2 種效果: 圖片放大 、 上下文字出現

2. 用 flex 進行排版

使用 flex 將版面排好,並用 transform 把第一和最後一個文字移至畫面外。

1/* 在 panels 新增 flex 屬性 */
2
3.panels {
4 display: flex;
5}
6
7/* 每個 panel 比例為1
8要使文字垂直置中,direction 為 column */
9
10.panel {
11 flex-grow: 1;
12 display: flex;
13 flex-direction: column;
14 justify-content: space-around;
15 cursor: pointer;
16}
17
18/* panel 的第一個p和最後一個p移至畫面外 */
19.panel p:first-child {
20 transform: translateY(-100vh);
21}
22
23.panel p:last-child {
24 transform: translateY(100vh);
25}

3. 點擊圖片,新增 2 種效果

其兩種效果的 className 為 .open 及 .show-text。

1/* 畫面佔比放大 */
2.panel.open {
3 font-size: 40px;
4 flex-grow: 3;
5}
6
7/* 將文字移動至原來位置 */
8.panel.show-text :first-child,
9.panel.show-text :last-child {
10 transform: translateY(0px);
11}

4. JavaScript 處理

先取得所有 panel,當點擊時 toggle 要呈現的 css 效果, 就把兩個 className 加入即可。

1const panels = document.querySelectorAll(".panel");
2
3panels.forEach((panel) => {
4 panel.addEventListener("click", () => {
5 panel.classList.toggle("open");
6 panel.classList.toggle("show-text");
7 });
8});

wesbos 版本, 他有使用 transitionend , 當 CSS transition 結束後觸發 toggleActive function 。

1// wesbos's method
2const panels = document.querySelectorAll(".panel");
3
4function toggleOpen() {
5 console.log("Hello");
6 this.classList.toggle("open");
7}
8
9function toggleActive(e) {
10 console.log(e.propertyName);
11 if (e.propertyName.includes("flex")) {
12 this.classList.toggle("open-active");
13 }
14}
15
16panels.forEach((panel) => panel.addEventListener("click", toggleOpen));
17panels.forEach((panel) =>
18 panel.addEventListener("transitionend", toggleActive)
19);

5. 參考資料

https://developer.mozilla.org/zh-TW/docs/Web/CSS/transform https://developer.mozilla.org/zh-TW/docs/Web/API/Element/classList

More articles from Iris Blog

Day4: Array Cardio 1 💪

練習 array 的應用,包含 filter 、 map 、 sort 、 reduce

June 19th, 2021 · 1 min read

Day3: CSS Variables

使用 JavaScript 及 CSS3 去調整圖片的邊框間距、模糊度、及背景顏色,標題 JS 也隨著背景顏色而改變。

June 17th, 2021 · 1 min read
© 2020–2021 Iris Blog
Link to $mailto:qweichew@gmail.comLink to $https://github.com/iris1114Link to $https://www.instagram.com/iris.justdoit/Link to $https://www.linkedin.com/in/iris-chew