1: 輪播的實現(xiàn)原理是怎樣的?如果讓你來實現(xiàn)并闲,你會抽象出哪些函數(shù)(or接口)供使用玩裙?(比如 play())
一種左右滾動輪播實現(xiàn)原理:
- 最外層可視窗口設置與圖片寬高相仿,并使用overflow: hidden, 內(nèi)部容器高度與圖片高度相仿晰绎,寬度為所有要輪播圖片寬度之和,并且絕對定位括丁,以便通過left值控制左右滾動荞下。
- 如果要左右無限滾動,還需要克隆last img放在容器內(nèi)最前面史飞,克隆first img放在容器內(nèi)最后面尖昏。這樣當輪播到第一張還想pre,或者最后一張還想next時构资,先展示克隆的img抽诉,緊接著通過修改css left值立刻替換為真正的尾張或首張img,由于沒有使用動畫吐绵,并且是一樣的圖片掸鹅,所以肉眼上看不出來變化,但實際上已經(jīng)從臨時展示的克隆img拦赠,變?yōu)樵璂OM中的img。
一種漸變輪播實現(xiàn)原理:
- 與上面相仿葵姥,但要更簡單荷鼠,內(nèi)部img不需要左右水平排列,只需要全部絕對定位榔幸,疊加在一起允乐,然后全部 display: none
- js中需要在加載后矮嫉,就立即執(zhí)行一次輪播函數(shù),來淡入首張img牍疏,接下來受按鈕控制蠢笋,通過淡出當前圖片,淡入預期圖片鳞陨,來達到漸變輪播昨寞。
關(guān)于抽象函數(shù)or接口:
首先抽象出函數(shù)or接口,是為了讓代碼更有條理厦滤,每個函數(shù)控制在20行內(nèi)援岩,降低單個函數(shù)的復雜度,提高代碼復用性掏导。 由不同的函數(shù)部件享怀,協(xié)同完成。降低了bug排查難度和耦合性趟咆。 同時也方便后續(xù)維護添瓷,修改,或者新增功能值纱。 這個就是抽象出函數(shù)or接口的意義鳞贷。
關(guān)于輪播,可以抽象出的接口比如:
- playNext() 切換到下一張
- playPre() 切換到上一張
- setBullet() 設置狀態(tài)指示符號
- autoPlay() 自動輪播
- stopAuto() 停止自動輪播
- ......