微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)


Posted in Javascript onJanuary 24, 2019

本文实例讲述了微信小程序导航栏滑动定位功能。分享给大家供大家参考,具体如下:

实现的效果

微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)

实现的原理

1. 通过对scroll的监听获取滚动条的scrollTop值;

2. 在导航的class判断scrollTop;

3. 切换position:fixed与position:relative。

WXML

<view style="height:100%;position:fixed;width:100%;">
 <scroll-view scroll-y="false" bindscroll="scroll" style="height:100%;">
  <view class="page-bottom-content">
   <text>{{text}}</text>
  </view>
  <view class="page-banner">
   banner
  </view>
  <view class="page-group {{scrollTop > 360 ? 'page-group-position' : ''}}">
   <view class="page-nav-list"><text>首页</text></view>
   <view class="page-nav-list"><text>活动</text></view>
   <view class="page-nav-list"><text>菜单</text></view>
   <view class="page-nav-list"><text>我的</text></view>
  </view>
  <view class="goods-list">
   goods-list
  </view>
 </scroll-view>
</view>

WXCSS

.page-banner{height: 500rpx;background-color: greenyellow;padding: 20rpx;color:#fff;}
.page-group{
 display: table;
 background-color: blueviolet;
 width: 100%;
 table-layout: fixed;
 position: relative;
 top: 0;
 left: 0;
}
.page-group-position{
 position: fixed;
}
.page-nav-list{
 padding:30rpx 0 ;
 display: table-cell;
 text-align: center;
 color: #fff;
}
.goods-list{
 height: 2000rpx;
 background-color: green;
 padding: 20rpx;
 color:#fff;
}

JS

Page({
 data: {
  scrollTop: null
 },
 //滚动条监听
 scroll: function (e) {
  this.setData({ scrollTop: e.detail.scrollTop })
 },
})

总结:

1. 要获取scrollTop,在微信小程序中我们需要:<scroll-view scroll-y="false" bindscroll="scroll" style="height:100%;"></scroll-view>

2. 微信小程序要绑定bindscroll事件,需要绑定在scroll-view组件上,同时设置scroll-y和height。

3. 如果scroll-view的高设置100%,就需要在其外层添加一个固定高的盒子,否则监听不会生效。

4. 通过scroll事件获取scrollTop:this.setData({ scrollTop: e.detail.scrollTop })

5. 导航栏class的切换:

scrollTop > 360 ? 'page-group-position' : ''

实质:

scrollTop > 360 ? 'fixed' : 'relative'

缺点:

1. 由于有获取scrollTop的过程,所以会出现定位不及时,也就是导航闪动的效果;
2. 没有原生CSS3的position:sticky流畅,体验比较差;
3. 由于我目前还未找到直接获取page-group的offsetTop方法,所以直接采用的是360固定值,此效果是在苹果6进行的测试。

此效果只是提供一个思路,不建议使用在项目中,体验太差,有待优化。如果有更好思路的大神,敬请指教。

Demo源码:

点击此处本站下载

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
jQuery powerFloat万能浮动层下拉层插件使用介绍
Dec 27 Javascript
将文本输入框内容加入表中的js代码
Aug 18 Javascript
使用CSS3的scale实现网页整体缩放
Mar 18 Javascript
javascript实现随时变化着的背景颜色
Apr 02 Javascript
整理Javascript数组学习笔记
Nov 29 Javascript
jQuery异步提交表单的两种方式
Sep 13 Javascript
微信小程序 购物车简单实例
Oct 24 Javascript
jQuery仿写百度百科的目录树
Jan 03 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
Feb 22 Javascript
AngularJS 打开新的标签页实现代码
Sep 07 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
Sep 28 Javascript
JS操作字符串转数字的常见方法示例
Oct 29 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
Jan 24 #Javascript
记一次vue去除#问题处理经过小结
Jan 24 #Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
Jan 23 #Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
Jan 23 #Javascript
vue车牌号校验和银行校验实战
Jan 23 #Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
Jan 23 #Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
Jan 23 #Javascript
You might like
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
2016/08/05 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
Python模块学习 datetime介绍
2012/08/27 Python
python算法学习之基数排序实例
2013/12/18 Python
python中遍历文件的3个方法
2014/09/02 Python
python开发中range()函数用法实例分析
2015/11/12 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
python之随机数函数的实现示例
2020/12/30 Python
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
公益活动策划方案
2014/01/09 职场文书
秋季婚礼证婚词
2014/01/11 职场文书
骨干教师培训感言
2014/01/16 职场文书
《花的勇气》教后反思
2014/02/12 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
就业意向协议书
2015/01/29 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP