小程序的导航栏动态响应

本文详细介绍了如何在微信小程序中实现导航栏的动态固定效果,包括导航栏在滑动到指定位置时固定在上方,下拉屏幕时解锁并随页面滑动,以及点击导航栏跳转至相应功能模块。主要通过WXML创建两个导航栏,一个静态一个固定,并结合onPageScroll事件监听滚动位置来切换显示。同时,文章也提到了如何计算锚点位置和页面滚动参数,确保导航栏的正确显示和功能模块的平滑滚动。
摘要由CSDN通过智能技术生成

效果要求:
1.导航栏滑动至上方某固定位置时,固定在上方。
2.当下拉屏幕至一定高度时,解锁导航栏,随页面一起滑动
3.点击导航栏功能模块标题,页面滑动至具体功能模块位置

思路:
wxml写两个相同的导航栏,一个属性为fixed,一个static
当导航模块滑动至锁定位置时,wx:if显示固定的模块(position: fixed)。并将static的导航栏用底色覆盖(防止同时显示两个导航栏
当static导航栏的父元素(第一锚点)锚点值减去头部高度(小程序有个头部算入页面)的差值小于当前页面滚动的值(onPageScroll的e.scrollTop,从0开始),显示fixed导航栏。反之不显示。

  1. 计算各个功能模块锚点的位置和第一锚点的位置
// currentScroll 当前位置滚动参数值
const query = wx.createSelectorQuery();
query.select('#firstPoint').boundingClientRect(rect => {
	firsrAnchor = rect.top + currentScroll // 下面5中的意思就是这个
}).exct();
...
  1. 计算头部和固定部分的高度
const query = wx.createSelectorQuery();
query.select('#navigator').boundingClientRect(rect => {
	height = rect.height
}).exct();
...

因为之前有这两个的数据,本需求没有用到计算的方式。

  1. 点击跳转至对应(锚点-固定部分高度-头部高度)使用wx.pageScrollTo滚动

  2. 比对当前位置和(第一锚点-头部高度)决定是否显示fixed导航栏,在onPageScroll生命周期中

  3. 若锚点位置受影响(锚点+当前位置滚动参数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值