【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    }