使用 vue + better-scroll实现横向滚动效果

 

1、安装better-scroll插件:npm install better-scroll --save

2、在项目中引用better-scroll对象:import BScroll from 'better-scroll'

3、例如,看一段代码:

 

1 <div class="person-wrap" ref="personWrap">
2   <ul class="person-list" ref="personTab">
3     <li class="person-item">1</li>
4     <li class="person-item">2</li>
5     <li class="person-item">3</li>
6     <li class="person-item">4</li>
7     <li class="person-item">5</li>
8   </ul>
9 </div>

 

 

 

  

  以上有三个点需要注意,第一个点是外部div是滚动的整个区域,需要通过ref获取dom;
  第二点是ul元素包裹子元素li的父元素,它的宽度是动态的,根据N个子元素的宽度计算得来,因此也需要通过ref获取dom;
  第三点是li元素在实际开发中是不确定的,它的个数以及宽度时刻影响着父元素的宽度。

4、最后,看一段核心代码:
 1 import BScroll from "better-scroll";
 2 export default {
 3   name: "ReserveInfo",
 4   data() {
 5     return {};
 6   },
 7   created() {
 8     this.$nextTick(() => {
 9       this.personScroll();
10     });
11   },
12   methods: {
13     personScroll() {
14       // 默认有六个li子元素,每个子元素的宽度为120px
15       let width = 6 * 120;
16       this.$refs.personTab.style.width = width + "px";
17       // this.$nextTick 是一个异步函数,为了确保 DOM 已经渲染
18       this.$nextTick(() => {
19         if (!this.scroll) {
20           this.scroll = new BScroll(this.$refs.personWrap, {
21             startX: 0,
22             click: true,
23             scrollX: true,
24             // 忽略竖直方向的滚动
25             scrollY: false,
26             eventPassthrough: "vertical"
27           });
28         } else {
29           this.scroll.refresh();
30         }
31       });
32     }
33   }
34 }

 


在html中dom全部渲染完毕后,调用this.personScroll()方法,该方法首先为ul父元素的宽度动态赋值;
接着定义滚动区域对象,设置相关的属性即可。

尾声

通过better-scroll我们能轻松的实现横向滚动或者纵向滚动,然而知道怎么用其实并没有什么乱用,

我们需要明白的是其原理,最后的最后请各位看官移步到better-scroll库设计者有话说,进一步探索better-scroll的奥妙所在。



[links]:https://www.imooc.com/article/272021

 

posted on 2020-09-27 17:07  取个名字真wff  阅读(1725)  评论(0编辑  收藏  举报