微信小程序-监听滚动,改变导航样式,点击导航,定位到页面相应为止

1.index.wxml页面
<!--头部导航-->
 <view class="nav-box" id="tab-con">
      <scroll-view scroll-x="true" scroll-into-view="{{activeNav}}" show-scrollbar="false">
        <view class="nav-list">
          <button bind:tap="changeActiveNav" id="{{item.value}}" class="{{activeNav===item.value?'active':''}}" wx:for="{{navList}}" wx:key="value" data-value="{{item.value}}">{{item.label}}</button>
        </view>
      </scroll-view>
    </view>
  </view>

<!--页面内容-->
  <view>
    <scroll-view scroll-y="true" class="tabBox" scroll-into-view="{{active_index}}" bindscroll="scroll" bindscrolltolower="bottom" scroll-with-animation="true" inertia="true" show-scrollbar="false" >
      <view class="basic-box default-box" id="basicData">
        <view class="title-box">基本信息</view>
        <view>
          </view>
        </view>
      </view>
      <view>
        <view class="default-box" id="legal">
          <view class="title-box">法律主体</view>
          
        </view>
        <view class="default-box" id="class">
         ....
        </view>
       
        </view>
      </view>
    </scroll-view>
  </view>
2.index.js 页面内容

通过block,判断是否点击了导航,如果点击则延时加载滚动

import {
  postPatentDetail
} from '../../../service/patent.js'
Page({
  data: {
    block: false,
//导航列表
    navList: [{
        label: '基本信息',
        value: 'basicData'
      },
      {
        label: '法律主体',
        value: 'legal'
      },
      {
        label: '商标分类',
        value: 'class'
      },
      {
        label: '优先权',
        value: 'priority'
      },
      {
        label: '流程信息',
        value: 'process'
      }
    ],
    activeNav: 'basicData',
  },
//点击导航
  changeActiveNav(e) {
    this.setActiveNav(e.target.dataset.value)
  },
  setActiveNav(val) {
    this.setData({
      activeNav: val,
      active_index: val,
      block: true
    })
    setTimeout(() => this.setData({block: false}), 1000);
  },
//页面加载时,获取导航对应组件的位置 top
 onReady() {
    wx.createSelectorQuery().selectAll('.default-box').boundingClientRect(results => {
      results.forEach((rect,index) => {
        let key = 'navList['+index+'].top';
        this.setData({
          [key]: rect.top
        });
      });
    }).exec();
  },
//scroll-view组件滚动绑定的方法
  scroll(e) {
    this.data.block ||this.data.navList.some((v, k) => {
      if (v.top > e.detail.scrollTop+120) {
        if (this.data.navList[k+1] && this.data.navList[k+1].top > e.detail.scrollTop) {
          this.setData({
            activeNav: v.value,
          });
          return true;
        }
      }
    })
  },
//scroll-view组件滚动到底部触发的方法
  bottom(e) {
    this.data.block ||this.setData({activeNav:'process',block:true});
    setTimeout(() => this.setData({block: false}), 1000);
    }
})
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值