【Y轴滑动-根本流程】:
1.定义初始化Y坐标和滚动数组:
scrollY: 0, //初始化Y坐标(用来装以后Y坐标)
tops:[] //初始化滚动li数组(用来装右侧菜单每个子元素的高度,滑动右侧菜单>更新左侧菜单分类)
2.定义初始化滚动办法:
// 初始化滚动
initScrollY() {
// 因为数据是异步,所以须要列表显示后再创立
let menu_wrapperY = new BScroll('.menu-wrapperY')
let foodScrollY = new BScroll('.food-wrapperY',{
// probeType 是定义scroll触发的机会,值可设置0/1/2/3,默认是0即为不触发,1/2是滑动触发,3是蕴含惯性滑动触发
probeType: 2
})
// on是监听
// 给右侧列表绑定'scroll'事件
foodScrollY.on('scroll',({x,y})=>{
// scroll为事件名:滚动的实时坐标
// 坐标取绝对值,获取以后坐标并赋值
this.scrollY = Math.abs(y);
})
// 如果probeType是3 则不须要定义scrollEnd
// 给右侧列表绑定'scrollEnd'事件(为解决惯性滑动)
foodScrollY.on('scrollEnd',({x,y})=>{
// scrollEnd为事件名:滚动的完结坐标
// 坐标取绝对值,获取以后坐标并赋值
this.scrollY = Math.abs(y);
})
}
3.定义初始化tops办法:
// 初始化tops li
//【留神:获取dom办法必须等界面更新后再执行】
initTops() {
// 1.初始化tops
let initTops = []
let top = 0
initTops.push(top)
// 2.收集lis伪数组转为数组
let lis = this.$refs.foodsTops.getElementsByClassName('food-list');
[...lis].forEach(li => {
top += li.clientHeight
initTops.push(top)
})
// 3.更新数据
this.tops = initTops
}
4.调用初始化滚动/tops办法:
mounted(){
this.$store.dispatch('shop/shopGoods').then((response)=>{
this.shopList = response;
// $nextTick 回调函数在界面更新之后立刻执行
this.$nextTick(() => {
this.initScrollY()
this.initTops()
})
})
}
5.获取左侧菜单对应的数组下标:
currentIndex() {
let {scrollY, tops} = this
let index = tops.findIndex((top,index)=> {
// top = ['每次遍历li的高度']
// 通过以后绝对值Y坐标来判断 从而得出菜单数组索引
return scrollY >= top && scrollY < tops[index+1]
})
return index
}
发表回复