亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Vue項目中使用better-scroll實現一個輪播圖自動播放功能

2019-11-19 12:25:13
字體:
來源:轉載
供稿:網友

前言

better-scroll是一個非常非常強大的第三方庫 在移動端利用這個庫 不僅可以實現一個非常類似原生ScrollView的效果 也可以實現一個輪播圖的效果 這里就先記錄一下自己實現這個效果的一些過程吧

思路

1.首先要確定自己的HTML結構 基本結構就是一個wrapper包含一個content

2.其次需要明白的一個頁面可以滾動的原理在于 當內容的高度超出了容器的高度才可以實現滾動 如果沒有超出 那么就沒有滾動的必要 因此第一點需要實現的就是 獲取到所有內容的高度 由于實現的是一個輪播圖 所以其實整個頁面應該想象成這樣

滾動原理

這里可以很清楚的看到 當頁面的橫向寬度超出了視口的寬度 因此也就可以實現滾動 綜上所述 可以看出 實現橫向輪播最重要的一點在于寬度 因此 我們首先要獲得的就是整個輪播圖的寬度

3.既然是個輪播圖 那么用戶同時也需要知道的就是 當前播放的是第幾張圖 也就是常見的"小白點" 小白點的個數用于告訴用戶總共有幾張圖 而當前播放第幾張圖則可以在小白點上加上一些特殊樣式的方法來告知用戶

4.輪播圖也需要一些常見的屬性 例如 頁面渲染以后自動播放以及播放間隔 還有一個就是 是否支持循環輪播

理清思路以后 就可以開始干活了 1.完善HTML結構 其實代碼非常簡單 也就是創建兩個div 并且添加ref引用可以方便的通過ref屬性獲取上下文

<div class="slider" ref="slider"> <div class="slider-content"  ref="sliderContent"> <slot></slot> </div></div>

這里用了vue中非常常見的slot插槽 為的是當我們在外部調用這個slider組件的時候 可以方便的在外部傳入一些子組件

2.上文已經提到了一些控制slider的屬性 所以需要在組件的props里接受這些屬性 便于我們在外部方便的控制這些屬性

props: { // 是否循環播放 loop: { type: Boolean, default: true }, // 是否自動播放 autoPlay: { type: Boolean, default: true }, // 播放間隔 interval: { type: Number, default: 3000 } }

3.一些初始步驟的完成的差不多了以后 我們需要借助到vue的一個生命周期鉤子 mounted 也就是當頁面渲染完畢以后 去獲取輪播圖的寬度以及初始化輪播圖的一些設置

mounted: function () { setTimeout(() => { this.setSliderWidth() this.initSlider() }, 20)

這里有一個小小的tips 就是 通常情況下 瀏覽器渲染dom的時間為17ms 所以這里使用了一個延遲函數 在20ms以后去調用這些方法 也就是確保瀏覽器的dom被正確渲染 防止出現一些問題

4.上面只是調用了這個方法 還沒有實現這些方法 首先在設置寬度的方法里 我們需要通過$refs.sliderContent拿到上下文 并且通過一個$refs.slider.clientWidth方法拿到當前屏幕寬度 然后遍歷這個容器 取得容器里的所有內容 同時把獲取的內容寬度設置為這個屏幕的寬度 最后所有的內容的寬度相加 就可以得到整個slider的寬度 說了這么多 感覺很繞口 所以還是看下代碼吧

// 設置slider的寬度 setSliderWidth: function (isResize) { // 獲取slider里的所有的子元素 this.children = this.$refs.sliderContent.children // console.log(this.children) // 計算寬度 = 圖片個數+每張圖片的寬度 let width = 0 // 獲取手機屏幕的寬度 let sliderWidth = this.$refs.slider.clientWidth  for (let i = 0; i < this.children.length; i++) { // 獲取children里的每一項內容  let child = this.children[i]  child.style.width = sliderWidth + 'px' width += sliderWidth } if (this.loop) { width += 2 * sliderWidth } this.$refs.sliderContent.style.width = width + 'px' }

這樣我們就獲取了整個slider的寬度 還有一個細節在于 當如果是loop的時候 better-scroll會在頭尾克隆兩份 所以寬度會需要*2 接下去就是實現一些初始化better-scroll的一些配置了 具體的參數內容可以從better-scorll官網上查詢到 這里就不多做贅述了

 // 設置寬度以后初始化slider initSlider: function () { this.slider = new BScroll(this.$refs.slider, { scrollX: true, scrollY: false, momentum: false, snap: {  loop: this.loop,  threshold: 0.3,  speed: 400 }, click: true }) }

5.實現上述兩個方法以后 其實輪播圖基本已經可以在頁面上看到了 大概就是長成這樣 不過這樣寫完以后 會發現輪播圖是沒有辦法自動輪播的以及當前顯示的是幾張圖的樣式并沒有正確顯示 所以接下去就是實現這兩個方法 ps:這里的圖片數據來源什么 是請求了QQ音樂banner的接口文件

輪播圖的效果

6.實現dots樣式的正確加載 這里用到了vue中樣式的綁定

<div class="dots"> <span class="dot"  v-for="(item, index) of dots"  :class="{active:currentPageIndex === index}"  :key="index"> </span> </div>

也就是說 我們通過下標來綁定樣式 同時監聽一個better-scroll的'scrollEnd'事件 當滾動結束的時候調用getCurrentPage()這個方法 這個方法會有一個返回值pageX 也就是橫向滾動到第幾頁 把這個返回值賦值給currentPageIndex 從而達到正確顯示樣式的目的

this.slider.on('scrollEnd', () => { let page = this.slider.getCurrentPage().pageX this.currentPageIndex = page // 當滾動結束以后 如果是自動播放的話 那么首先要清除定時器(防止手動拖動輪播圖以后圖片無法正確顯示)然后再次執行方法 才能實現輪播 if (this.autoPlay) {  clearTimeout(this.timer)  this.play() } })

7.實現自動播放功能 better-scroll也提供了一個接口goToPage(x, y, time, easing) 顧名思義也就是轉到對應頁面 其中幾個參數分別代表 x表示橫向頁面 y表示縱向頁面 time表示動畫執行時間 easing一般不建議修改 有了這個接口 其實就非常輕松了 我們只需要在methods里再寫一個Play方法 具體的思路就是 通過currentPageIndex+=1得到下一張要播放的圖片的索引 同時當索引值達到圖片數組的長度的時候將要索引重新賦值為0就好了 并在頁面渲染了以后調用就可以了

play: function () { let playPage = this.currentPageIndex + 1 if (playPage === this.children.length - 2) { playPage = 0 } setTimeout(() => { this.slider.goToPage(playPage, 0, 400) }, this.interval) }

這里也有個細節就是 當設置這個輪播圖為循環滾動的時候 better-scroll會自動在頭尾各克隆一份圖片 所以長度需要減去2 這樣就可以實現輪播圖的自動播放了

總結

以上所述是小編給大家介紹的Vue項目中使用better-scroll實現一個輪播圖自動播放功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九热精品视频在线播放| 色与欲影视天天看综合网| 国产一区二区在线免费| 国产精品久久久久久久久久久不卡| 98视频在线噜噜噜国产| 国产精品91久久久久久| 亚洲欧洲日韩国产| 91最新国产视频| 国产精品视频免费在线观看| 欧美日本在线视频中文字字幕| 精品女厕一区二区三区| 国产精品揄拍一区二区| 狠狠躁夜夜躁人人爽超碰91| 亚洲国产成人精品久久久国产成人一区| 久久乐国产精品| 欧美激情视频三区| 日韩欧美一区二区在线| 日韩不卡中文字幕| 97视频网站入口| 欧美精品免费播放| 欧美大学生性色视频| 91免费精品视频| 神马久久桃色视频| 久久九九全国免费精品观看| 7777精品视频| 久久久免费在线观看| 久久精品99久久香蕉国产色戒| 亚洲欧洲在线视频| 国产一区二区黄| 日韩黄在线观看| 精品国产乱码久久久久久婷婷| 精品国产美女在线| 亚洲影院在线看| 国产精品视频精品视频| 国产精品入口尤物| 精品久久久久久国产| 日韩中文字幕在线精品| 日韩中文视频免费在线观看| 97成人精品视频在线观看| 国产69久久精品成人看| 久久影视电视剧免费网站清宫辞电视| 91久久精品日日躁夜夜躁国产| 欧美精品在线观看| 91在线观看免费高清完整版在线观看| 欧美国产日本在线| 91久久国产精品91久久性色| 日韩av在线免播放器| 日韩在线视频二区| 91久热免费在线视频| 久久91精品国产| 亚洲男人天天操| 97视频在线观看播放| 亚洲国产精品嫩草影院久久| 国产一级揄自揄精品视频| 久久久久久国产三级电影| 91香蕉嫩草神马影院在线观看| 精品视频一区在线视频| 欧美诱惑福利视频| 欧美视频不卡中文| 欧美黑人一区二区三区| 91亚洲永久免费精品| 亚洲网在线观看| 97香蕉久久超级碰碰高清版| 亚洲欧洲日产国码av系列天堂| 91久久久亚洲精品| 久久视频中文字幕| 国产精品高清网站| 欧美激情一区二区三区成人| 国产成人亚洲综合91精品| 91久久国产综合久久91精品网站| 欧美激情亚洲综合一区| 亚洲少妇中文在线| 日韩中文在线中文网三级| 91极品视频在线| 海角国产乱辈乱精品视频| 日韩在线观看免费高清| 国产区亚洲区欧美区| 欧美亚洲免费电影| 俺去啦;欧美日韩| 欧美午夜影院在线视频| 色婷婷av一区二区三区久久| 久久中文久久字幕| 亚洲白虎美女被爆操| 久久久久久久久久亚洲| 亚洲影院色无极综合| 91社区国产高清| 国产精品老女人视频| 亚洲人成77777在线观看网| 久久五月天综合| 亚洲午夜av电影| 欧美午夜宅男影院在线观看| 亚洲欧美变态国产另类| 永久免费毛片在线播放不卡| 精品中文字幕在线| 久久精品一区中文字幕| 亚洲欧美日韩第一区| 色婷婷av一区二区三区在线观看| 欧美色道久久88综合亚洲精品| 日韩有码在线播放| 久久精品国产精品亚洲| 亚洲午夜精品久久久久久性色| 欧美性受xxxx黑人猛交| 国产精品99久久久久久白浆小说| 亚洲a一级视频| 久久精品小视频| 国产欧美日韩91| 亚洲第一中文字幕| 国产成人一区二区三区小说| 欧美性jizz18性欧美| 亚洲精品综合精品自拍| 最近更新的2019中文字幕| 国产亚洲精品久久久久久777| 黑人与娇小精品av专区| 性亚洲最疯狂xxxx高清| 亚洲一区二区日本| 亚洲欧美三级在线| 2019日本中文字幕| 亚洲专区在线视频| 欧美黑人国产人伦爽爽爽| 久久久精品影院| 久久91超碰青草是什么| 一个人www欧美| 久久久久久久一| 国产日韩欧美在线视频观看| 一区二区三区视频免费| 性色av一区二区三区免费| 久久中文字幕一区| 亚洲一级黄色片| 日韩一区二区久久久| 欧美成人中文字幕| 久久亚洲精品国产亚洲老地址| 欧美色videos| 亚洲自拍av在线| 欧美激情手机在线视频| 亚洲欧美激情另类校园| 精品久久久久久| 亚洲国产欧美精品| 亚洲自拍偷拍一区| 成人黄色在线播放| 成人黄色免费看| 欧美日韩在线观看视频小说| 精品久久久久久亚洲国产300| 福利视频导航一区| 国产欧洲精品视频| 国产美女主播一区| 日韩av123| 国产91在线高潮白浆在线观看| 午夜免费久久久久| 亚洲白虎美女被爆操| 久久偷看各类女兵18女厕嘘嘘| 2019亚洲男人天堂| 日韩欧美福利视频| 久久国产精品久久久久久| 久久精品国产清自在天天线| 亚洲成avwww人| 4p变态网欧美系列| 日韩专区在线播放| 欧美电影免费观看电视剧大全| 日韩中文字幕亚洲| 欧美一级片在线播放| 日韩精品免费观看| 国产精品自产拍在线观看中文| 欧美电影免费观看大全| 欧美激情一区二区三级高清视频|