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