VUE 滾動插件(better-scroll)


1. 概述

1.1 說明

better-scroll是一款重點解決移動端(已支持PC)各種滾動場景需求的插件。例如淘寶聚划算中的類型選擇(女裝/家紡/生鮮美食等),沒有滾動條顯示卻實現了滾動功能。

1.2 better-scroll安裝

   npm install better-scroll --save 安裝至項目中

1.3 better-scroll使用

  better-scroll常見應用場景(列表滾動)的html結構:

<div class="wrapper">
  <ul class="content">
    <li>...</li>
    <li>...</li>
    ...
  </ul>
  <!-- 這里可以放一些其它的 DOM,但不會影響滾動 -->
</div>

  備注:better-scroll是作用在外層wrapper容器上的,滾動的部分是content元素。並且better-scroll只處理容器(wrapper)的第一個子元素(content)的滾動,其他的元素都會被忽略。

   better-scroll初始化代碼:

better-scroll提供了一個類,實例化的第一個參數是一個原生的DOM對象,如果不是傳遞的對象,而是傳遞的字符串(類名或者id),better-scroll內部會嘗試調用querySelector去獲取這個DOM對象。

<->直接傳遞DOM對象

import BScroll from 'better-scroll'
let wrapper = document.querySelector('.wrapper')
let scroll = new BScroll(wrapper)

<二>傳遞字符串,使better-scroll內部去獲取DOM對象

import BScroll from 'better-scroll'
let scroll = new BScroll('.wrapper')

2. 代碼

2.1 代碼示例

2.1 子組件scrollChild(橫向滾動組件)

<template>
  <div class='move-tabs'>
    <div class='tabs-wrapper' ref='tabsWrapper'>
      <ul ref='tab'>
        <li v-for='(item, index) in tabs' :key='index'>
          <div class='tab-item'>
            <div class='expand-block'>
              {{item.name||'無'}}
            </div>
          </div>
        </li>
      </ul>
    </div>
  </div>
</template>
<script>
  import BScroll from 'better-scroll'

  export default {
    props: {
      data: Array,
    },
    data() {
      return {
        tabs: [],
        mX: 0,
        tabWidth: 300,
      }
    },
    mounted() {
      this.$nextTick(() => {
        console.log(this.data)
        this.tabs = this.data
        this._initMenu()
      })
    },
    methods: {
      _initMenu() {
        const tabsWidth = this.tabWidth
        const width = this.tabs.length * tabsWidth
        this.$refs.tab.style.width = `${width}px`
        this.$nextTick(() => {
          if (!this.scroll) {
            this.scroll = new BScroll(this.$refs.tabsWrapper, {
              scrollX: true,
              eventPassthrough: 'vertical',
            })
          } else {
            this.scroll.refresh()
          }
        })
      },
    },
  }
</script>
<style scoped>
  .move-tabs {
    position: relative;
    top: 0;
    bottom: 0;
    width: 100%;
  }
  .tabs-wrapper {
    height: 120px;
    width: 100%;
    box-sizing: border-box;
    overflow: hidden;
    white-space: nowrap;
  }
  .tab-item {
    float: left;
    width: 280px;
    height: 120px;
    padding: 10px;
    margin-right: 20px;
    background: #f5f5;
    box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.1);
    border-radius: 4px;
  }
  .expand-block {
    font-size: 30px;
    font-weight: bold;
    color: #333333;
  }
</style>

2.1 父組件scrollParent(調用子組件)

<template>
<div>
  <child-scroll :data='scrollList' />
</div>
</template>

<script>
  import ChildScroll from '../components/scrollChild'
  export default {
    name: "scrollParent.vue",
    components: {
      ChildScroll,
    },
    data(){
      return {
        scrollList:[
          {name:'北京'},
          {name:'上海'},
          {name:'杭州'},
          {name:'廣州'},
          {name:'鄭州'},
          {name:'深圳'},
          {name:'合肥'},
          {name:'徐州'},
          {name:'西安'},
          {name:'石家庄'},
          {name:'呼和浩特'},
          {name:'蘭州'},
          {name:'包頭'},
          {name:'重慶'},
        ]
      }
    },
  }
</script>

<style scoped>

</style>

2.2 結果展示

  可左右滑動出所需要展示的列表集合


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM