微信小程序实现商城分类,点击左侧滚动到相应区域,滚动右侧高亮左侧导航(scroll-view)


<view>
  <view class="cateBox">
    <!-- 左侧列表 -->
    <scroll-view class="cate-left" scroll-y="true" :scroll-top="verticalNavTop" scroll-with-animation>
      <view class="cate-left-list" wx:for="{{shopList}}" wx:key="index" bindtap="tapselect" data-index="{{index}}">
        <view class="{{currentTab==index ? 'activeItem':'cate-left-item'}} " >
          <label></label><text>{{item.navtitle}}</text>
        </view>
      </view>
    </scroll-view>

    <!-- 右侧列表 -->
    <scroll-view class="cate-right" style="height: 100vh;" scroll-y="true" bindscroll="mainScroll" scroll-into-view="cate-{{mainCur}}"
      scroll-with-animation>
      <view wx:for="{{shopList}}" wx:key="index" id="cate-{{index}}">
        <view class="cate-right-title">
          <view class="line"></view>
          <text>{{item.navtitle}}</text>
        </view>
        <view class="cate-right-list">
          <view class="cate-right-item" wx:for="{{item.shop}}" wx:key="childindex" wx:for-item="child"
            bindtap="getShop" data-child="{{child}}">
            <image src="{{child.shopimage}}" mode=""></image>
            <text>{{child.shoptitle}}</text>
          </view>
        </view>
      </view>
      <view style="height: 100px;"></view>
    </scroll-view>
  </view>

</view>





Page({

    data: {
     
        shopList:[
          {
            navtitle: '分类1',
            shop: [{
                    shoptitle: "轮胎1",
                    shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
                },
                {
                    shoptitle: "轮胎2",
                    shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
                },
                {
                    shoptitle: "轮胎3",
                    shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
                },
                {
                    shoptitle: "轮胎4",
                    shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
                }
            ]
        },
        {
            navtitle: '分类2',
            shop: [{
                shoptitle: "轮胎1",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎2",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎3",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎4",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            }
            ]
        },
        {
            navtitle: '分类3',
            shop: [{
                shoptitle: "轮胎1",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎2",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎3",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎4",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            }
            ]
        },
        {
            navtitle: '分类4',
            shop: [{
                shoptitle: "轮胎1",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎2",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎3",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎4",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            }
            ]
        },
        {
            navtitle: '分类5',
            shop: [{
                shoptitle: "轮胎1",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎2",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎3",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎4",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            }
            ]
        },
        {
            navtitle: '分类6',
            shop: [{
                shoptitle: "轮胎1",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎2",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎3",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎4",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            }
            ]
        },
        {
            navtitle: '分类7',
            shop: [{
                shoptitle: "轮胎1",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎2",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎3",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            },
            {
                shoptitle: "轮胎4",
                shopimage: "https://img20.360buyimg.com/babel/s590x470_jfs/t20270114/102162/22/20269/61727/65a4ccaeF48dc4510/0144871874125bc0.jpg.webp",
            }
            ]
        },
        ],//
        currentTab: 0,
        mainCur: 0,
        verticalNavTop: 0,
        list: [{}],
  
     
    },
    onLoad(options) {
      // this.getHeight();
    //   this.getShopList();//先获取商品数据
    },
    // 获取商品数据
    getShopList(){
       wx.request({
         url: '',
         header:{
            'content-type': 'application/x-www-form-urlencoded'
         },
         method:'GET',
         success:(res)=>{
             console.log('商品分类',res.data.data)
            if(res.data.data.length!==0){
             this.setData({
                 shopList:res.data.data
             })
             this.getHeight()
            }
             
         }
       })
    },
 // 选择的商品
    getShop(e){
     console.log(e.currentTarget.dataset.child)
    },

     
      //点击左侧按钮
      tapselect(e) {
        this.setData({
          currentTab:e.currentTarget.dataset.index,
          mainCur:e.currentTarget.dataset.index,
          verticalNavTop: (e.currentTarget.dataset.index - 1) * 50
        })
      
      },
      //右侧滚动
      mainScroll(e) {
       
        let scrollTop = e.detail.scrollTop + 10;
        for (let i = 0; i < this.data.list.length; i++) {
          if (scrollTop > this.data.list[i].top && scrollTop < this.data.list[i].bottom) {
            // 此处屏蔽,避免点击最后一个回退, 但是没有右边滚动指示
            if(this.data.currentTab != this.data.list.length - 1){
             
              this.setData({
                currentTab:i,
                verticalNavTop:(i-1)*50
              })
              
              return false
            }
            
          }
        }
      },
      //获取右侧每项的top和bottom,里面需获取对应dom元素的高度,所以只能在onload生命周期里调用
      getHeight() {
        var top = 0;
        var bottom = 0;
        var temp = 0;
        for (let i = 0; i < this.data.shopList.length; i++) {
          let view = wx.createSelectorQuery().select("#cate-" + i)
  
          // #ifdef  MP-WEIXIN
          view = wx.createSelectorQuery().in(this).select("#cate-" + i);
          //	#endif
  
  
          view.fields({
            size: true
          }, data => {
            top = temp;
            bottom = temp + data.height;
            this.data.list[i] = {
              top: top,
              bottom: bottom
            };
            temp = bottom;
          }).exec();
        }
        // console.log(this.data.list)
  
      }
    
  
  
 
})
.cateBox {
  position: absolute;
  bottom: 0;
  background: #fff;
  width: 100%;
  display: flex;
}

.cate-left {
  width: 200rpx;
  background: #f4f4f4;
  height: 100%;
}

.cate-left-item {
  background-color: rgb(245,245,245);
  height: 50px;
  line-height: 50px;
  font-size: 28rpx;
  align-items: center;
}

.activeItem {
  background: #fff;
  height: 50px;
  line-height: 50px;
  color: red;
  font-size: 32rpx;
  align-items: center;
  text-align: center;
}

.cate-left-item label {
  width: 4rpx;
  height: 15px;
  float: left;
  background: #f4f4f4;
}

.cate-left-item.activeItem label {
  background: #0bbbef;
}

.cate-left-item text {
  width: 196rpx;
  font-size: 28rpx;
  display: block;
  text-align: center;
}

/* 右侧*/
.cate-right {
  flex: 1;
}

.cate-right-title {
  text-align: center;
  font-size: 28rpx;
  margin-top: 20rpx;
  line-height: 80rpx;
  position: relative;
}

.cate-right-title .line {
  position: absolute;
  height: 2rpx;
  width: 300rpx;
  top: 39rpx;
  left: 50%;
  margin-left: -150rpx;
}

.cate-right-title text {
  background: #fff;
  padding: 0 10px;
  position: relative;
  /* color: #999; */
}

.cate-right-list {
  height: auto;
  overflow: hidden;
}

.cate-right-item {
  width: 33.33%;
  float: left;
  margin-top: 20rpx;
}

.cate-right-item image {
  width: 160rpx;
  height: 160rpx;
  display: block;
  margin: 0 auto;
}

.cate-right-item text {
  display: block;
  text-align: center;
  font-size: 24rpx;
}

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序中使用 Vant 组件库的侧边导航滚动,需要首先在项目中引入 Vant 组件库,并且按照 Vant 的文档进行组件的配置和使用。 首先,在项目根目录下的 `app.json` 文件中配置 Vant 组件的全局样式,示例如下: ```json { "style": "vant-weapp/dist/common/index" } ``` 然后在需要使用侧边导航滚动的页面中引入 Vant 的侧边导航栏组件,并按照需求设置好相关属性和事件,示例如下: ```html <van-sidebar show="{{ true }}" width="200rpx" :style="height: 100vh;"> <van-sidebar-item v-for="(item, index) in menuList" :key="index" :title="item.title" :dot="item.dot" :badge="item.badge" /> </van-sidebar> ``` 其中,`show` 属性用于控制侧边导航栏的显示与隐藏,`width` 属性用于设置导航栏的宽度,`:style` 属性用于设置导航栏的高度为可视区域的高度。 此外,需要根据实际需求在 `data` 数据中定义 `menuList` 数组,并为每个侧边导航栏项设置相应的标题、角标和小红点。 最后,在页面的生命周期函数中,通过监听滚动事件来实现侧边导航栏的滚动效果,示例如下: ```javascript Page({ onScroll: function(event) { // 根据滚动位置处理侧边导航栏的样式 } }) ``` 在监听滚动事件中,可以根据滚动位置来处理侧边导航栏的样式,例如高亮当前正在滚动导航项。 总结起来,要在微信小程序中使用 Vant 组件库的侧边导航滚动,需要首先引入 Vant 组件库并进行配置,然后在页面中按照需求引入侧边导航栏组件并设置相应的属性和事件,最后在监听滚动事件中处理导航栏的样式即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值