什么是 better-scroll
better-scroll 是一个移动端滚动的解决方案,它是基于 iscroll 的重写,它和 iscroll 的主要区别在 这里 。better-scroll 也很强大,不仅可以做普通的滚动列表,还可以做轮播图、picker 等等。
<template>
<div>
<div class="goods">
<div class="menu-wrapper" ref="menuWrapper">
</div>
<div class="food-wrapper" ref="foodWrapper">
</div>
</div>
</div>
</template>
与1.0版本不同的是,我们使用的是ref
<script type="text/ecmascript-6">
import BScroll from "better-scroll";
export default {
data(){
return {
currentIndex:1,
goods:[]
}
},
created(){
this.classMap=['decrease','discount','special','invoice','guarantee'];
this.$http.get('/api/goods').then((response)=>{
response=response.body;
if (response.errno===ERR_OK) {
this.goods=response.data;
}
//dom结构加载结束(nextTick这个接口是计算dom相关的,要确保原生dom已经渲染了)
this.$nextTick(()=>{
this._initScroll();
});
});
},
methods:{
_initScroll(){
// 使用better-scroll实现的关键代码
this.menuScroll=new BScroll(this.$refs.menuWrapper,{click:true});
this.foodScroll=new BScroll(this.$refs.foodWrapper,{click:true});
}
}
};
</script>
很简单这样页面就可以滚动了,如下图
但是,这样左右两个页面并没有联动起来,需要我们再定义一个方法来计算滚动的高度,以及在计算属性中计算左侧当前索引在哪里
从而定义左侧边栏的位置
computed:{
//用来计算左侧当前索引在哪,从而定位到左侧边栏的位置
currentIndex(){
for (let i = 0; i < this.listHeight.length; i++) {
var height1=this.listHeight[i]