vue踩坑笔记 十一.vue中引入滑块组件

效果图

在这里插入图片描述

安装依赖

npm install better-scroll -S

常见用法

BetterScroll 最常见的应用场景是列表滚动,我们来看一下它的 html 结构。

<div class="wrapper">
  <ul class="content">
    <li>...</li>
    <li>...</li>
    ...
  </ul>
  <!-- 这里可以放一些其它的 DOM,但不会影响滚动 -->
</div>

上面的代码中 BetterScroll 是作用在外层 wrapper 容器上的,滚动的部分是 content 元素。这里要注意的是,BetterScroll 只处理容器(wrapper)的第一个子元素(content)的滚动,其它的元素都会被忽略

最简单的初始化代码如下:

<template>
   <div class='list' ref = "wrapper">
     <div>
      	// 想具有滚动效果的dom元素
     </div>
   </div>
</template>

<script>
import BScroll from 'better-scroll'

export default {
  mounted () {
    this.scroll = new BScroll(this.$refs.wrapper)
  }
}
</script>

完整代码

<!--  -->
<template>
   <div class='list' ref = "wrapper">
     <div>
      <div class = "area">
        <p>当前城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
        </div>
      </div>
      <div class = "area">
        <p>热门城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
        </div>
      </div>
      <div class = "area">
        <p>当前城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
        </div>
      </div>
      <div class = "area">
        <p>热门城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
        </div>
      </div><div class = "area">
        <p>当前城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
        </div>
      </div>
      <div class = "area">
        <p>热门城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
        </div>
      </div>
      <div class = "area">
        <p>当前城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
        </div>
      </div>
      <div class = "area">
        <p>热门城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
        </div>
      </div><div class = "area">
        <p>当前城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
        </div>
      </div>
      <div class = "area">
        <p>热门城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
        </div>
      </div>
      <div class = "area">
        <p>当前城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
        </div>
      </div>
      <div class = "area">
        <p>热门城市</p>
        <div class="btnList">
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
          <div class="btn">北京</div>
        </div>
      </div>
     </div>
   </div>
</template>

<script>
import BScroll from 'better-scroll'

export default {
  components: {},
  data () {
    return {
    }
  },
  methods: {},
  created () {},
  mounted () {
    this.scroll = new BScroll(this.$refs.wrapper)
  }
}
</script>

<style lang = "less" scoped>
.list{
    overflow: scroll;
    position: absolute;
    top: 1.7rem;
    bottom: 0;
  .area{
    p{
      background-color: #EBEBED;
      font-size: .2rem;
      font-weight: 600;
      line-height: .5rem;
      text-indent: .2rem;
    }

    .btnList{
      display: flex;
      justify-content: flex-start;
      flex-wrap: wrap;
      padding: .15rem 0;
      padding-right: .4rem;
      .btn{
        width: 1rem;
        padding: .1rem .2rem;
        margin: .1rem .15rem;
        border: 1px solid #ccc;
        text-align: center;
      }
    }
  }
}
</style>

在滑块中可能会碰到这样的bug,在pc端模拟是点击没有问题,但是在真机测试时,无法触发click事件,这个时候就要在better-scroll初始化的时候加上一行配置

{ click: true }

完整初始化代码

mounted () {
    this.scroll = new BScroll(this.$refs.wrapper, { click: true })
  },

完美解决移动端双击不触发onclick事的bug

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章