小程序onPageScroll上滑显示,下滑隐藏

本文介绍了如何在小程序中优化onPageScroll事件,通过添加定时器和清除原有处理,实现上滑显示内容,下滑隐藏内容的功能,以减少执行频率并提高性能。

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

说明:因onPageScroll执行过于频繁,为了减少运行,在条件不满足时onPageScroll不执行方法。且每次运行会清除原来的

1.简化前

//util.js公共方法(怎么调用我就不写啦)
function scrollFloatwindow(e,that){
  if (e.scrollTop <= 0) {
    e.scrollTop = 0;     //最顶部
  } else if (e.scrollTop > that.data.scrollHeight) {
    e.scrollTop = that.data.scrollHeight;    //最底部
  }else if(e.scrollTop > that.data.scrollTop || e.scrollTop >= that.data.scrollHeight,){
     that.setData({
	   istrue_scroll:true;
	 })
  }else{
     that.setData({
		istrue_scroll:false;
	 })
  }
  that.setData({
	scrollTop:e.scrollTop
  })
  //that.data.scrollTop:e.scrollTop
}


//使用这个方法的page.js页面(记得要引用util页面哦)
  //监听屏幕滚动 判断上下滚动 (组件悬浮窗使用) 
  onPageScroll: function (ev) {
    if(this.data.isusescroll=="no_normal"){
      var that=this;
      wx.createSelectorQuery().select('#box').boundingClientRect((rect) => {
        this.setData({
          scrollHeight: rect.height
        })
      }).exec()
      util.scrollFloatwindow(ev,that);
    }else{
      return;
    }   
  }
 
 //wxml
 <view id="box">
   //内容
 </view>

2.util.js里scrollFloatwindow方法简化后(完整【ps:加了个定时器以及清除】)

// util.js公共方法

let scrollFloatwindow_id=null;
//悬浮窗滚动方法判断方法
function scrollFloatwindow(e,that){
  if (e.scrollTop <= 0) {
    //最顶部
    e.scrollTop = 0;
  } else if (e.scrollTop > that.data.scrollHeight) {
    //最底部
    e.scrollTop = that.data.scrollHeight;
  }
 if(scrollFloatwindow_id) clearTimeout(scrollFloatwindow_id);
  //给scrollTop重新赋值 
  scrollFloatwindow_id=setTimeout(() => {
    that.setData({
      istrue_scroll:e.scrollTop > that.data.scrollTop || e.scrollTop >= that.data.scrollHeight,
      scrollTop:e.scrollTop
    });
  }, 50);
  
}
### 微信小程序页面上时与底部距离的计算方法 对于微信小程序而言,在处理页面上过程中监测其与底部的距离,通常会涉及到监听页面滚动事件并动态计算当前位置相对于整个文档的高度差。具体来说: 当需要检测页面上至接近底部一定范围内触发特定行为(如加载更多数据),可以在页面组件中通过`bindscrolltolower`属性绑定触底事件[^1]。 然而更精确控制情况下,则需利用`onPageScroll`生命周期函数来捕获实时滚动位置,并据此推算剩余空间大小。下面是一个简单的例子展示如何实现这一逻辑: ```javascript // pages/index.js Page({ data: { scrollTop: 0, windowHeight: 0, // 可视窗口高度 documentHeight: 0 // 整个文档高度 }, onLoad() { const query = wx.createSelectorQuery(); // 获取可视区域高度 wx.getSystemInfo({ success(res) { this.setData({windowHeight: res.windowHeight}); }.bind(this) }); // 查询整个页面内容高度 query.select('.content').boundingClientRect(rect => { if (rect){ this.setData({documentHeight: rect.height}); } }).exec(); }, onPageScroll(e) { let {scrollTop} = e.detail; this.setData({scrollTop}); // 判断是否即将到达底部 if ((this.data.scrollTop + this.data.windowHeight >= this.data.documentHeight - 50)) { console.log('快要到底部了'); } } }) ``` 上述代码片段展示了如何在微信小程序中监控页面滚动状态,并基于当前滚动条的位置以及屏幕尺寸和总文档长度之间的关系来判定是否靠近页面底部。这里的关键在于使用`wx.getSystemInfo()`获取设备信息中的窗口可见高度(`windowHeight`),并通过`createSelectorQuery().select()`查询指定节点的实际渲染后的边界矩形(`boundingClientRect`)得到整体文档高度(`documentHeight`)。最后,在每次发生滚动操作时调用`onPageScroll`回调更新最新的垂直偏移量(`scrollTop`),进而完成对距底部距离的估算[^2]。 为了使体验更加流畅自然,还可以考虑引入防抖机制防止频繁触发临界条件下的响应动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值