輪播實(shí)現(xiàn)

輪播的實(shí)現(xiàn)原理是怎樣的?如果讓你來實(shí)現(xiàn),你會(huì)抽象出哪些函數(shù)(or接口)供使用?

在實(shí)現(xiàn)輪播之前首先要確定要實(shí)現(xiàn)什么樣的輪播:

  • 對(duì)于無限滾動(dòng)輪播:
    將圖片排成一行,并將一個(gè)供輪播的窗口固定大小,隱藏超出范圍的圖片,并在第一張圖片前添加復(fù)制的最后一張圖片,在最后一張圖片后添加復(fù)制的第一張圖片,當(dāng)觸發(fā)點(diǎn)擊下一張圖片的事件時(shí),根據(jù)方向移動(dòng)圖片位置來滾動(dòng)顯示圖片,滾動(dòng)到最后一張圖片或第一張圖片時(shí),再次滾動(dòng)要跳轉(zhuǎn)到第一張的圖片或最后一張圖片的位置。
  • 對(duì)于無限漸進(jìn)漸出的輪播:
    所有的圖片都疊放在一起,開始時(shí)統(tǒng)一設(shè)置display:none,然后通過fadeout當(dāng)前頁,fadeIn需要展示的圖片。

其次,需要考慮一些細(xì)節(jié)問題:

  • bullets與圖片滾動(dòng)的同步問題。
  • 若需要在快速點(diǎn)擊時(shí),判斷輪播是否處于動(dòng)畫中,就要利用jQuery中的is(':animated')或者引入isAnimated變量動(dòng)態(tài)判斷。
  • 若對(duì)于快速點(diǎn)擊,需要輪播同時(shí)響應(yīng)用戶的點(diǎn)擊,并且不讓用戶等的太久,可以利用jQuery中的stop()函數(shù)。例如:
    $node.stop(true).animate()
    這樣可以取消當(dāng)前的動(dòng)畫隊(duì)列,從而快速到達(dá)用戶想要的位置。
  • 自動(dòng)播放問題,是否添加自動(dòng)播放,當(dāng)用戶鼠標(biāo)放在輪播上時(shí),取消自動(dòng)播放,提高用戶體驗(yàn)。(注意使用setTimeout()來模擬setInterval()
  • 對(duì)于輪播圖片比較多,可以考慮通過懶加載的方式來節(jié)省流量,提高用戶體驗(yàn)。

完成一個(gè)輪播是,必要的一些函數(shù)接口和變量:

  • 變量:
  • idx(0): 始終跟隨當(dāng)前顯示圖片的索引。
  • imgCount: 圖片的數(shù)量。
  • isAnimated(false): 當(dāng)前是否處于動(dòng)畫中。
  • 函數(shù):
  • autoPlay() 和 stopAuto()
  • play(num) 這是最穩(wěn)重要的輪播函數(shù),num可以是目標(biāo)idx與當(dāng)前所在idx的差值,可正可負(fù),為正時(shí),向前滾動(dòng)num個(gè),為負(fù)時(shí),向后滾動(dòng)num個(gè)。在這其中,要注意idx的變化與計(jì)算(特別是當(dāng)idx處于最大和最小時(shí)),可以利用:
    idx = (idx + num + imgCount) % imgCount (視具體情況而定)
  • setBullet() 函數(shù),在play()中被調(diào)用。用來同步bullets(下方小點(diǎn))的變化。

一些輪播實(shí)例

1
1
1
11
1
11
1
11
1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容