zoukankan      html  css  js  c++  java
  • 商家详情-分类和商品实现左右联动代码总结

    分类点击到商品指定位置

    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;
        })
      },

    实现效果图

    你的无畏来源于你的无知!

  • 相关阅读:
    移动布局之弹性布局
    .dpg和.webp的图片格式
    跳转不到对应的JSP页面
    CentOS7配置vsftpd3.0.2
    Linux如何将用户从一个组中移除?
    数组和方法
    运算符
    数据类型转换
    Apache的虚拟主机配置及伪静态操作
    Linux--文件的上传和下载
  • 原文地址:https://www.cnblogs.com/YiwenGG/p/13881126.html
Copyright © 2011-2022 走看看