小程序 固定分类导航 点击栏目滑动到相应内容

本文介绍了一种在小程序中实现页面滑动与导航栏联动的方法,通过监听页面滚动和点击事件,使导航栏随页面滚动而变化,增强用户体验。文章详细展示了使用WXML和JS代码实现这一功能的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:先看一下效果图,点击对应栏目,页面滑动到对应的分类内容。

 

2:第一步先实现页面内容;

<!-- 分类导航 -->
  <view class='nav_fl'>
    <view wx:for="{{goodlist}}" data-index="{{index}}" data-id="b{{index}}" bindtap='tap'>{{item.name}}
      <text class='{{index==navActive?"navactive":""}}'></text>
    </view>
  </view>

 <view style='clear:both;'></view>

<!-- 滚动部分 -->

 <scroll-view class='scrollView' scroll-y="true" scroll-into-view="{{toView}}" style='height:{{height}}rpx;' bindscroll="scroll" scroll-with-animation='true'>
      <view wx:for="{{goodlist}}" wx:for-index="indexOut" id="b{{indexOut}}">
          <view class='listImg'>
            <image style='width:100%;height:290rpx;' src='{{item.img}}'></image>
            <text>已售:200</text>
          </view>
          <view class='listName'>{{item.title}}</view>
          <view class='listId'>{{item.desc}}</view>
      </view>

</scroll-view>

3:设置滑动部分的高度;

onLoad: function(res) {
    var that = this;
    //设置商品列表高度
    wx.getSystemInfo({
      success: function(res) {
        that.setData({
          height: res.windowHeight + 380,
        })
      },
    });
  },

4:点击导航栏目,滑动到对应商品;

  tap: function(e) {
    console.log(e);
    var id = e.currentTarget.dataset.id;
    var index = e.currentTarget.dataset.index;
    this.setData({
      toView: id,
      navActive: index
    });
  },

5:滑动页面,对应导航active;

//首先要获取部分内容距离顶部的高度,滑动的时候监听高度是否到达对应位置;

// 获取商品列表,生成高度集合
        var height = 0;
        var hightArr = []; 
        for (var i = 0; i < that.data.goodlist.length; i++) { //这里的goodlist指对应商品集合
            //获取元素所在位置
          var query = wx.createSelectorQuery();
          var idView="#b"+i;
          query.select(idView).boundingClientRect()
          query.exec(function (res) { 
            var top = res[0].top; 
            hightArr.push(top); 
            that.setData({
              hightArr: hightArr
            });
          });
        } ;


// 页面滑动到相应位置 对应导航提示
   scroll:function(e){
    var scrollTop = e.detail.scrollTop + 400;
    var scrollArr=this.data.hightArr;
       for (var i = 0; i < scrollArr.length; i++) {
        if (scrollTop >= 0 && scrollTop < scrollArr[0]) {
          if (0 != this.data.lastActive) {
            this.setData({
              navActive: 0,
              lastActive: 0
            })
          }
        } else if (scrollTop >= scrollArr[i - 1] && scrollTop <= scrollArr[i]) {
          if (i != this.data.lastActive) {
            this.setData({
              navActive: i,
              lastActive: i
            })
          }
        }
      }
  },

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值