切版紀錄 | 來手刻輪播效果吧~

更新於 發佈於 閱讀時間約 7 分鐘
raw-image

前幾天和一起轉職的同學分享工作近況的時候,得知他們公司切版時,大部分會手刻,比較少用現成的 UI 套件工具,像輪播效果也是手刻,讓我覺得有點挑戰,決定也來自己手刻一個輪播工具!

先附上最終結果的 codepen


再來記錄一下實作過程

切出畫面

因為之前很常使用 swiper 做輪播,所以知道最基本的架構會是:

  • 輪播框架 (swiper,包含幻燈片+切換按鈕/scrollbar...等等)
  • 輪播圖片區 (swiper-wrapper,包含多張幻燈片)
  • 單張幻燈片 (swiper-slide)
  • 左右按鈕 (swiper-btn)
raw-image

這次會先做簡單的單張圖片輪播,所以輪播框架和輪播圖片區基本上看起來會一樣大,依照這樣的架構思路來切版, HTML 的部分比較沒問題,就是 swiper 包輪播圖片區和左右按鈕,輪播圖片內再去排列單張幻燈片。


CSS 定位

輪播效果比較重要的是slide「定位」「移動效果」,所以 CSS 的 position 定位設置好,整個效果就會出來!

輪播框架 swiper

width / height 是整個輪播區的大小

position: relative; 讓按鈕可以定位在幻燈片的左右兩側

.swiper {
position: relative;
max-width: 900px;
height: 450px;
margin: 30px auto;
}


輪播圖片區 swiper-wrapper

position: relative; 讓每張 slide 定位在圖片區內,之後會根據切換按鈕去移動 slide 的位置百分比例,達成切換效果

overflow: hidden; 把定位在左右的兩張圖片隱藏起來

.swiper-wrapper{
position: relative;
overflow: hidden;
width: 100%;
height: 100%;
}


單張幻燈片 swiper-slide

transition: all 1s; 切換下一張時可以平滑移動

left: 100%; 讓所有幻燈片定位在 swiper-wrapper 的外面,只有加上 active 這個 class 的幻燈片會出現在 swiper-wrapper 畫面內

z-index:1; 讓所有幻燈片的圖層低於 active 的幻燈片

.swiper-slide {
width: 100%;
height: 100%;
transition: all 1s;
position: absolute;
top: 0;
left: 100%;
z-index:1;
}

.active{
left: 0%;
z-index:10;
}


剩下的 swiper-imgswiper-btn 就依照自己想設置的位置和樣式去寫就可以了,我的詳細設置可以看 codepen,基本切版雛形完成,目前就會是一個還不能切換的畫面,現在可以開始寫 javascript 讓它動起來了~


按鈕切換邏輯

定義變數

  1. 先取得 DOM 元素、所有幻燈片的陣列和綁定按鈕監聽事件
  2. slideIndex要紀錄目前 active slide 所在的陣列位置
  3. sliderPrevIndexslideIndex 的前一張
  4. ​sliderNextIndexslideIndex 的後一張
const nextBtn = document.querySelector(".swiper-btn-next");
const preBtn = document.querySelector(".swiper-btn-pre");
const slide = document.querySelectorAll(".swiper-slide");
let slideIndex = 0;
let sliderPrevIndex = 0;
let sliderNextIndex = 0;
const slideNumber = slide.length;

綁訂監聽事件

  1. 按下 next 按鈕時,slideIndex += 1,如果 slideIndex 跑到最後一筆,則 slideIndex = 0
  2. 按下 prev 按鈕,slideIndex 剛好為 0 的情況 slideIndex = 陣列長度 - 1 ,其他情況則 slideIndex - 1
nextBtn.addEventListener("click", () => {
if (slideIndex == slideNumber - 1) {
slideIndex = 0;
} else {
slideIndex += 1;
}
updateClasses();
});

preBtn.addEventListener("click", () => {
if (slideIndex == 0) {
slideIndex = slideNumber - 1;
} else {
slideIndex -= 1;
}
updateClasses();
});


跑迴圈加上相應class

迴圈清除所有幻燈片原本綁定的 active/prev/next class,並根據 slideIndex 為當前的 slide 加上 active,以及前後兩張 slide 分別加上 prev/next 的 class

function updateClasses() {
if (slideIndex === 0) {
sliderPrevIndex = slideNumber - 1;
} else {
sliderPrevIndex = slideIndex - 1;
}

if (slideIndex === slideNumber - 1) {
sliderNextIndex = 0;
} else {
sliderNextIndex = slideIndex + 1;
}

slide.forEach((i) => {
i.classList.remove("active", "prev", "next");
});
slide[slideIndex].classList.add("active");
slide[sliderPrevIndex].classList.add("prev");
slide[sliderNextIndex].classList.add("next");
}


最後別忘了回到 HTML 去把預設要顯示的第一張 slide 加上 active class,下一張 slide 加上 next class,前一張 slide 加上 prev class,一個簡單的輪播效果就完成了~


我是Amber,前端學習中,歡迎交流討論🧸

留言
avatar-img
留言分享你的想法!
avatar-img
Amber hh的沙龍
23會員
22內容數
Amber hh的沙龍的其他內容
2024/09/04
第三次月會來了!這個月的主題是「工程師的溝通秘訣」 很多人認為,當工程師只要跟電腦對話就好,在轉職之前我也這麼認為的,尤其是以前在服務業工作,從早到晚跟客戶對談、處理他們各種疑難雜症和情緒的過程,實在太容易讓我感到心累了,倒不如整天跟電腦對話,對錯很明顯,也不用顧及雙方情緒,肯定比處理客訴簡單
Thumbnail
2024/09/04
第三次月會來了!這個月的主題是「工程師的溝通秘訣」 很多人認為,當工程師只要跟電腦對話就好,在轉職之前我也這麼認為的,尤其是以前在服務業工作,從早到晚跟客戶對談、處理他們各種疑難雜症和情緒的過程,實在太容易讓我感到心累了,倒不如整天跟電腦對話,對錯很明顯,也不用顧及雙方情緒,肯定比處理客訴簡單
Thumbnail
2024/08/03
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
2024/08/03
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
2024/07/24
剛開始學前端都是跟著六角的課程進度走,雖然知道自己不會的技術很多,但至少有明確的學習目標,也會定期產出結果,當時的焦慮來源只覺得時間總是不夠,殊不知真正踏入實務工作後,除了焦慮時間不夠之外,甚至還有點迷失了方向。 轉職後的公司僅一人前端,我沒有 mentor 帶領,也找不到可以效仿學習的 Ro
Thumbnail
2024/07/24
剛開始學前端都是跟著六角的課程進度走,雖然知道自己不會的技術很多,但至少有明確的學習目標,也會定期產出結果,當時的焦慮來源只覺得時間總是不夠,殊不知真正踏入實務工作後,除了焦慮時間不夠之外,甚至還有點迷失了方向。 轉職後的公司僅一人前端,我沒有 mentor 帶領,也找不到可以效仿學習的 Ro
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
在這篇文章中,我們將探討如何製作章節轉場動畫,讓您的作品更具吸引力。本文包含了準備素材、定義圖片、製作簡易動畫等步驟,適合初學者進行學習和操作。我們提供了必要的資源和範例,讓您能輕鬆上手。期待透過這篇教學,能讓您在創作中達到更高的境界!
Thumbnail
在這篇文章中,我們將探討如何製作章節轉場動畫,讓您的作品更具吸引力。本文包含了準備素材、定義圖片、製作簡易動畫等步驟,適合初學者進行學習和操作。我們提供了必要的資源和範例,讓您能輕鬆上手。期待透過這篇教學,能讓您在創作中達到更高的境界!
Thumbnail
如戰場一般剪片 老實說剪輯一部動畫其實很費時,需要繪畫很多圖、挑選音樂、理順情節、上效果和字母、出片。更不用說如果要放yt前做好SEO和文案,然後趕上片。 這次我為了參加比賽頂硬上,把以前寫好的歌曲和素材,但沒有腳本下,邊剪邊上邊補畫圖。最終還是趕上了…現在差寫報名表,接著明天就要面對現實去
Thumbnail
如戰場一般剪片 老實說剪輯一部動畫其實很費時,需要繪畫很多圖、挑選音樂、理順情節、上效果和字母、出片。更不用說如果要放yt前做好SEO和文案,然後趕上片。 這次我為了參加比賽頂硬上,把以前寫好的歌曲和素材,但沒有腳本下,邊剪邊上邊補畫圖。最終還是趕上了…現在差寫報名表,接著明天就要面對現實去
Thumbnail
  1990年代電腦刻印出現後,雖然取代了大部份的人工,但當時的電腦刻印字體少、刻工粗糙,對傳統刻印並未產生太大的威脅,有許多刻印店還和篆刻家合作,幫忙篆刻家代為接受訂製。 到了2010年,雷射雕刻的技術進步,用來刻印章已經可以表現得非常精細了,甚至可以做到照相印刷般的完全複製。 我先後請大陸
Thumbnail
  1990年代電腦刻印出現後,雖然取代了大部份的人工,但當時的電腦刻印字體少、刻工粗糙,對傳統刻印並未產生太大的威脅,有許多刻印店還和篆刻家合作,幫忙篆刻家代為接受訂製。 到了2010年,雷射雕刻的技術進步,用來刻印章已經可以表現得非常精細了,甚至可以做到照相印刷般的完全複製。 我先後請大陸
Thumbnail
Ae 小技巧:宣紙噪點+抽幀效果 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
Ae 小技巧:宣紙噪點+抽幀效果 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
前幾天和一起轉職的同學分享工作近況的時候,得知他們公司切版時,大部分會手刻,比較少用現成的 UI 套件工具,像輪播效果也是手刻,讓我覺得有點挑戰,決定也來自己手刻一個輪播工具!
Thumbnail
前幾天和一起轉職的同學分享工作近況的時候,得知他們公司切版時,大部分會手刻,比較少用現成的 UI 套件工具,像輪播效果也是手刻,讓我覺得有點挑戰,決定也來自己手刻一個輪播工具!
Thumbnail
【線上工具】whisper-jax 將影片轉換成純文字的線上工具,你可以直接上傳聲音檔案或是貼上Youtube連結,網站就會自動幫你轉換成純文字檔案,介介推薦的方式是直接貼上 Youtube 進行轉換,產出的文字稿除了可以整篇產出,也可以依照時間點,進行逐行的列表呈現,此外這個網站也支援直接透
Thumbnail
【線上工具】whisper-jax 將影片轉換成純文字的線上工具,你可以直接上傳聲音檔案或是貼上Youtube連結,網站就會自動幫你轉換成純文字檔案,介介推薦的方式是直接貼上 Youtube 進行轉換,產出的文字稿除了可以整篇產出,也可以依照時間點,進行逐行的列表呈現,此外這個網站也支援直接透
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News