有關(guān)swiper動(dòng)態(tài)改變數(shù)據(jù)遇到的坑(不能自動(dòng)滾動(dòng),自動(dòng)跟新數(shù)據(jù),切換不正常)...

以前都覺得swiper的使用很簡(jiǎn)單,那是因?yàn)槭褂胹wiper時(shí)都是寫的數(shù)據(jù),按照官網(wǎng)上介紹直接初始化swiper,隨便丟一個(gè)地方初始化就ok了,但是在很多需求中,我們都需要?jiǎng)討B(tài)的改變數(shù)據(jù),這樣可能就會(huì)遇到很多問題

以下簡(jiǎn)單說說最近遇到的問題:
1、swiper不能自動(dòng)切換(設(shè)置了autoplay)。

2、數(shù)據(jù)不匹配(需要加載的數(shù)據(jù)以改變,但是swiper里面的數(shù)據(jù)出現(xiàn)錯(cuò)誤)。

3、數(shù)據(jù)匹配過后,永遠(yuǎn)切換不到第一條數(shù)據(jù)。

4、根本不能切換,手動(dòng)拉也拉不動(dòng)。

關(guān)于在vue項(xiàng)目中如何引用swiper插件步驟:

第一步 安裝swiper: npm install swiper@3.4.1 --save-dev

第二步 在用到此插件的組件中 引用組件

import Swiper from 'swiper';

import 'swiper/dist/css/swiper.min.css';

解決后的代碼如下:

HTML代碼
     <div class="swiper-container" >
            <ul class="swiper-wrapper" >
              <li class="swiper-slide" v-for="(item,index) in swiperList" :key="index">{{item.title}}</li>
            </ul>
            <!--如果需要分頁(yè)器-->
            <div class="swiper-pagination"></div>
     </div>
methods : {
    initSwiper(){
      setTimeout( () => {
        //輪播
        var mySwiper = new Swiper('.swiper-container', {
          autoplay:3000,//自動(dòng)輪播
          peed:300,
          loop: true,  //開啟輪播圖前后循環(huán)模式
          slidesPerView:2, //輪播個(gè)數(shù)
          direction:'vertical', //方向 vertical、horizontal
          pagination:'.swiper-pagination',//如果需要分頁(yè)器
          observer:true,//修改swiper自己或子元素時(shí),自動(dòng)初始化swiper
          observeParents:false,//修改swiper的父元素時(shí),自動(dòng)初始化swiper
          onSlideChangeEnd: function(swiper){
             swiper.update();  
             mySwiper.startAutoplay();
               mySwiper.reLoop();  
          }
        })
      })
    },
mounted () {
      this.$nextTick(() => {
        this.initSwiper()
      })
  }
}

真正的核心部分在

observer:true,//修改swiper自己或子元素時(shí),自動(dòng)初始化swiper
observeParents:false,//修改swiper的父元素時(shí),自動(dòng)初始化swiper
onSlideChangeEnd: function(swiper){
   swiper.update();
   mySwiper.startAutoplay();
   mySwiper.reLoop();
}

加上這串代碼后,使用基本正常

mySwiper.reLoop(); 重新對(duì)需要循環(huán)的slide個(gè)數(shù)進(jìn)行計(jì)算,當(dāng)你改變了slidesPerView參數(shù)時(shí)需要用到,需要自動(dòng)輪播的時(shí)候必須要加上;

swiper.update(); 更新Swiper,這個(gè)方法包含了updateContainerSize,updateSlidesSize,updateProgress,updatePagination,updateClasses方法。也就是數(shù)據(jù)改變是重新初始化一次swiper;

mySwiper.startAutoplay(); 重新開始自動(dòng)切換;

?著作權(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ù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

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

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