【实现效果】:1.滑动右侧列表,左侧菜单高亮2.点击左侧菜单,右侧列表滑动到对应列表位置【总体思路】:1.scrollY:获取当前Y坐标,监听滑动【注】:转换为绝对值】2.tops:获取右侧列表中每个子元素li高度的数组(通过$refs获取容器)。Dom,将伪数组转为数组,遍历得到每一个li的clientHeight)3.向右滑动列表,左侧菜单高亮:findIndex遍历tops数组,返回top高度小于的index大于当前Y坐标且当前Y坐标小于下一个top高度,绑定菜单高亮4.点击左侧菜单,右侧列表滑动到对应列表位置:点击左侧菜单事件传递在(index)中,通过tops[index]得到对应的li高度,然后传给the参数给scrollTo(x,y,time)滑动到指定位置【注:此时传递的参数Y坐标要为负值才能向下滑动】【Y轴菜单列表滑动-实现代码】:1.定义初始化Y坐标和滚动数组:scrollY:0,//初始化Y坐标(用于保存当前Y坐标)tops:[]//初始化滚动li数组(用于保存每个sub的高度-右侧菜单的元素,滑动右侧菜单>更新左侧菜单的类别)2.定义初始化滚动方法:methods:{//初始化滚动initScrollY(){//因为数据是异步的,所以需要显示列表后创建。this.menu_wrapperY=newBScroll('.menu-wrapperY')this.foodScrollY=newBScroll('.food-wrapperY',{//probeType是定义scroll触发的时机,值可以设置为0/1/2/3,默认0表示不触发,1/2是滑动触发,3是包括惯性滑动触发probeType:3})//on是监听//右边的sidelist绑定到'scroll'eventthis.foodScrollY.on('scroll',({x,y})=>{//scroll是事件名称:滚动实时坐标//取坐标的绝对值,得到当前坐标并分配this.scrollY=Math.abs(y);})}////如果probeType为3,则不需要定义scrollEnd////将'scrollEnd'事件绑定到右侧列表(解决惯性滑动)//this.foodScrollY.on('scrollEnd',({x,y})=>{//scrollEnd为事件名:滚动结束坐标////坐标取绝对值,获取当前坐标并赋值//this.scrollY=Math.abs(y);//})3.定义初始化tops的方法:methods:{//初始化topsli//【注意:获取dom的方法必须在界面更新后执行】initTops(){//1.初始化topsletinitTops=[]lettop=0initTops.push(top)//2.收集lis伪数组并将其转化为数组letlis=this.$refs.foodsTops.getElementsByClassName('food-列表');[...lis]。forEach(li=>{top+=li.clientHeightinitTops.push(top)})//3.更新数据this.tops=initTops}}4.调用初始化scrolling/tops方法:mounted(){this.$store.dispatch('shop/shopGoods').then((response)=>{this.shopList=response;//接口更新后立即执行$nextTick回调函数this.$nextTick(()=>{this.initScrollY()this.initTops()})})}5。Rightlistslide="leftmenuhighlight:computed:{//Rightlistslide="leftmenuhighlightcurrentIndex(){//获取左侧菜单对应的数组下标let{scrollY,tops}=thisletindex=tops.findIndex((top,index)=>{//top=['每次遍历li的高度']//根据当前绝对值Y坐标判断得到菜单数组IndexreturnscrollY>=top&&scrollY
