当前位置 主页 > 网站技术 > 代码类 >

    vue滚动插件better-scroll使用详解

    栏目:代码类 时间:2019-10-18 18:09

    本文实例为大家分享了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>