微信小程序-监听屏幕滚动

该博客介绍监听屏幕滚动的功能及实现方法。功能是向下滚动时搜索框和分类选项置顶,向上滚动恢复原样。实现运用页面Page()函数的onPageScroll方法监听滚动距离,在.js和.wxml页面操作,用hidden属性控制显示隐藏,结合三元操作符和顶部固定。

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

一、效果:

功能描述:监听屏幕滚动,实现向下滚动时搜索框和分类选项置顶,向上滚动页面恢复原样。

二、实现:

运用页面Page()函数中的onPageScroll方法,来监听屏幕滚动的距离。

1).js中:

data:{
  scrollTop:0,
},

//监听屏幕滚动 判断上下滚动
  onPageScroll: function (ev) {
    this.setData({
      scrollTop: ev.scrollTop
    })
  },

2).wxml页面中:

  • hidden属性来控制局部的显示与隐藏 
  • 三元操作符
  • 顶部固定
  <!--轮播图-->
  <view class="container-top" hidden="{{scrollTop>178?true:false}}">
   ........
  </view>
  <!--搜索-->
  <view class="collect-top {{scrollTop>178?'addClass':''}}">
   ......
  </view>
/*搜索框置顶**/
.addClass{
  position:fixed;
  top:0px;
}

 

### 微信小程序 `scroll-view` 组件实现滚动吸顶效果 为了实现在微信小程序中的 `scroll-view` 滚动时具有吸顶的效果,可以采用监听滚动位置的方法来动态调整样式。具体来说,在页面加载完成后初始化数据,并通过绑定的滚动事件实时更新顶部导航的状态。 #### 初始化页面布局与逻辑处理 首先定义好页面结构,包括固定的头部和其他内容部分: ```html <view class="container"> <!-- 头部 --> <view wx:if="{{isFixed}}" class="header-fixed">种类Tab</view> <!--滚动的内容区 --> <scroll-view scroll-y bindscroll="handleScroll" style="height: {{scrollViewHeight}}px;"> <view class="header-unfixed">种类Tab</view> <!-- 初始未固定状态下的Header --> <!-- 动态生成的分类列表或其他内容 --> <block wx:for="{{categoryList}}" wx:key="index"> <view>{{item}}</view> </block> </scroll-view> </view> ``` 接着是在 JavaScript 文件里编写对应的业务逻辑: ```javascript Page({ data: { isFixed: false, // 控制是否启用吸顶功能 scrollViewHeight: 0, categoryList: [] // 存储从服务器获取到的数据 }, onLoad() { const query = this.createSelectorQuery(); let that = this; query.select('.container').boundingClientRect(function (rect) { if (rect !== null && rect.height > 0){ that.setData({ scrollViewHeight: rect.height }); } }).exec(); // 获取后台返回的数据填充至界面 wx.request({ url: 'https://example.com/api/categories', success(res) { that.setData({ categoryList: res.data }); }, fail(err) { console.error('Failed to fetch categories:', err); } }) }, handleScroll(e) { const scrollTop = e.detail.scrollTop; // 当滚动距离超过一定阈值时开启吸顶模式 if (scrollTop >= 80){ this.setData({ isFixed: true }); }else{ this.setData({ isFixed: false }); } } }); ``` 最后是 CSS 样式的设定,用于控制不同状态下 Tab 的表现形式: ```css .header-fixed { position: fixed; top: 0; width: 100%; background-color: white; z-index: 999; } .header-unfixed { margin-bottom: 20rpx; } ``` 上述方法实现了当用户向下滚动超过指定像素后,原本位于页面顶端的 "种类Tab" 将会被新的固定定位版本所取代,从而达到视觉上的“吸顶”效果[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值