better-scroll滾動(dòng)排坑

BetterScroll號(hào)稱目前最好用的移動(dòng)端滾動(dòng)插件,因此它的強(qiáng)大之處肯定是存在的。要不...哈哈。個(gè)人感覺(jué)還是很好用的。這篇文章不是籠統(tǒng)的講BetterScroll,而是單講滾動(dòng),想要深入了解它,請(qǐng)移步或者這里。

  • 滾動(dòng)原理
結(jié)構(gòu)圖

綠色部分為 wrapper,也就是父容器,它會(huì)有固定的高度。黃色部分為 content,它是父容器的第一個(gè)子元素,它的高度會(huì)隨著內(nèi)容的大小而撐高。那么,當(dāng) content 的高度不超過(guò)父容器的高度,是不能滾動(dòng)的,而它一旦超過(guò)了父容器的高度,我們就可以滾動(dòng)內(nèi)容區(qū)了。橫向滾動(dòng)的原理一致就是將固定高度改為固定寬度。(這里就不啰嗦了)

  • 縱向滾動(dòng)

    廢話不多說(shuō),我們直接上代碼。

    <template>
      <div class="wrapper" ref="wrapper">
          <ul>
            <li v-for="item in 8">{{item}}</li>
          </ul>
      </div>
    </template>
    <script>
      import BScroll from 'better-scroll';
        export default {
          mounted() {
            this.$nextTick(() => {
              this.scroll = new BScroll(this.$refs.wrapper);
            });
          }
        };
    </script>
    <style type="text/css">
      .wrapper{
        overflow:hidden;
        height:100vh;
      }
      ul li{
        height:400px;
      }
    </style>
    

    這是一個(gè)Vue BetterScroll縱向滾動(dòng)demo,這里需要注意的有兩點(diǎn)。

    • 只能有一層父級(jí)div,也就是容器
    • 父級(jí)div要設(shè)置溢出隱藏,并且固定高度
  • 橫向滾動(dòng)

    橫向滾動(dòng),相比縱向滾動(dòng)需要?jiǎng)討B(tài)的去獲取滾動(dòng)區(qū)的寬度,直接上代碼。

    <template>
      <div class="tab" ref="tab">
        <ul class="tab_content" ref="tabWrapper">
          <li class="tab_item" v-for="item in itemList" ref="tabitem">
              {{item.title}}
          </li>
        </ul>
      </div>
      </template>
      <script>
      import BScroll from 'better-scroll';
        export default {
          data() {
            return{
              itemList:[
              {
                'title':'關(guān)注'
              },
              {
                'title':'推薦'
              },
              {
                'title':'深圳'
              },
              {
                'title':'視頻'
              },
              {
                'title':'音樂(lè)'
              },
              {
                'title':'熱點(diǎn)'
              },
              {
                'title':'新時(shí)代'
              },
              {
                'title':'娛樂(lè)'
              },
              {
                'title':'頭條號(hào)'
              },
              {
                'title':'問(wèn)答'
              },
              {
                'title':'圖片'
              },
              {
                'title':'科技'
              },
              {
                'title':'體育'
              },
              {
                'title':'財(cái)經(jīng)'
              },
              {
                'title':'軍事'
              },
              {
                'title':'國(guó)際'
              }
              ]
            }
          },
          created() {
            this.$nextTick(() => {
              this.InitTabScroll();
            });
          },
          methods:{
            InitTabScroll(){
              let width=0
              for (let  i = 0; i <this.itemList.length; i++) {
                  width+=this.$refs.tabitem[0].getBoundingClientRect().width; //getBoundingClientRect() 返回元素的大小及其相對(duì)于視口的位置
              }
              this.$refs.tabWrapper.style.width=width+'px'
              this.$nextTick(()=>{
                  if (!this.scroll) {
                    this.scroll=new BScroll(this.$refs.tab, {
                      startX:0,
                      click:true,
                      scrollX:true,
                      scrollY:false,
                      eventPassthrough:'vertical'
                    });
                  }else{
                    this.scroll.refresh()
                  }
              });
            }
          }
        };
      </script>
      <style lang="scss" scoped>
      .tab{
        width: 100vw;
        overflow: hidden;
        padding:5px;
        .tab_content{
          line-height: 2rem;
          display: flex;
          .tab_item{
            flex: 0 0 60px;
            width:60px;
          }  
        }
      }  
      </style>
    

    橫向滾動(dòng)需要注意。

    • 只能有一層父級(jí)div,也就是容器
    • 父容器要設(shè)置溢出隱藏并固定寬度
    • 動(dòng)態(tài)獲取滾動(dòng)區(qū)的寬度

因?yàn)樽罱?xiàng)目需要,所以從網(wǎng)上查閱了許多資料也無(wú)法解決我的問(wèn)題。BetterScroll官網(wǎng)也沒(méi)有提供實(shí)際demo參考,所以就利用休息時(shí)間,寫了這篇文章。希望能對(duì)你們有用。需要具體demo請(qǐng)移步,別忘了給個(gè)star啊,寫文章不容易,給個(gè)贊唄!

tips:上文的代碼可以直接使用,小伙伴們安裝完依賴后可以直接copy測(cè)試哦~

?著作權(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)容

  • 謝謝作者的文章 非常喜歡 請(qǐng)?jiān)试S收藏! 博客園首頁(yè)博問(wèn)閃存新隨筆訂閱管理 vue之better-scroll的封裝...
    peng凱閱讀 16,694評(píng)論 2 5
  • Swift版本點(diǎn)擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,990評(píng)論 7 249
  • 31花橋詩(shī)酒 我有一壺濁酒 還有一本圍爐夜讀的詩(shī)集 以夢(mèng)為馬 就此上路! 酒 花橋泉水所釀 詩(shī) 花橋河畔清風(fēng)明月所...
    秭歸秀才9條命兒閱讀 242評(píng)論 0 1
  • 隔了一天,還是想寫那位奶奶,那就從了吧!從己心,從她...愛(ài) 家訪偶得(一)提到,初見(jiàn)這位老太太,根...
    林與木閱讀 379評(píng)論 0 0
  • 2017或許是我人生中最有故事的一年。做了許多,也錯(cuò)了許多。 2017,我接受了該有的安排,參加了高考,得到一個(gè)分...
    企鵝帝國(guó)閱讀 262評(píng)論 0 0

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