商家详情-分类和商品实现左右联动代码总结

分类点击到商品指定位置

data添加currentIndex

data() {
    return {
        active: 0,
        categories: [],
        positions: [],
        currentIndex: 0
    };

mounted页面加载完成计算positions

mounted(){
    const categories = kfc['categories'];
    // for (let index=0; index < categories.length; index++){
    //   const category = categories[index];
    //   this.categories.push({id:category.id,name:category.name})
    // }
    this.categories = categories
    this.$nextTick(() => {
      var menuScroll = new BScroll(this.$refs.category,{
      scrollY: true,
      click: true
    })
      var goodsScroll = new BScroll(this.$refs.goods,{
      scrollY: true,
      click: true
    })
    this.menuScroll = menuScroll;
    this.goodsScroll = goodsScroll;

    const positions = [0];
    let offset = 0;
    const dlList = document.getElementsByClassName('goods-dl');
    for(let dl of dlList){
      const height = dl.clientHeight;
      offset += height;
      positions.push(offset);
    }
    this.positions = positions;
    })
  },

给分类添加点击滚动方法

methods: {
    categoryClick(index){
      const position = this.positions[index]
      // 滚动的时候,如果想要望上面滚动 y要为负数
      this.goodsScroll.scrollTo(0, -position, 500)
      this.currentIndex = index
    }

点击事件和点击高亮

<li v-for="(category, index) in categories" :key="category.name" @click="categoryClick(index)" :class="index==currentIndex?'active':''">
                {{category.name}}
</li>

 css高亮样式添加

li{
          height: 50px;
          line-height: 50px;
          &.active{
            background-color: #ccc;
          }

效果图

滚动商品到分类到指定位置

mounted(){
    const categories = kfc['categories'];
    // for (let index=0; index < categories.length; index++){
    //   const category = categories[index];
    //   this.categories.push({id:category.id,name:category.name})
    // }
    this.categories = categories
    this.$nextTick(() => {
      var menuScroll = new BScroll(this.$refs.category,{
      scrollY: true,
      click: true
    })
      var goodsScroll = new BScroll(this.$refs.goods,{
      scrollY: true,
      click: true,
      // 设置probeType为2,监听scroll事件
      probeType: 2
    })

    goodsScroll.on('scroll',(pos) => {
      const y = Math.abs(pos.y);
      const positions = this.positions;
      for (let index = positions.length-1; index >= 0; index-- ) {
        const position = positions[index];
        if (y >= position){
          this.currentIndex = index;
          break
        }
      }
    })

    this.menuScroll = menuScroll;
    this.goodsScroll = goodsScroll;

    const positions = [0];
    let offset = 0;
    const dlList = document.getElementsByClassName('goods-dl');
    for(let dl of dlList){
      const height = dl.clientHeight;
      offset += height;
      positions.push(offset);
    }
    this.positions = positions;
    })
  },

实现效果图

 

posted @ 2020-10-26 20:51  一文g  阅读(409)  评论(0编辑  收藏  举报