微信小程序导航栏滑动定位功能示例(实现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 相关文章推荐
接收键盘指令的脚本
Jun 26 Javascript
js的alert弹出框出现乱码解决方案
Sep 02 Javascript
javascript设计模式之工厂模式示例讲解
Mar 04 Javascript
在父页面得到zTree已选中的节点的方法
Feb 12 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
Nov 09 Javascript
jQuery复合事件结合toggle()方法的用法示例
Jun 10 jQuery
JS实现浏览上传文件的代码
Aug 23 Javascript
JavaScript设计模式之享元模式实例详解
Jan 17 Javascript
vue组件命名和props命名代码详解
Sep 01 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
Sep 12 Javascript
JavaScript对象原型链原理详解
Feb 05 Javascript
React实现类似淘宝tab居中切换效果的示例代码
Jun 02 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
新浪新闻小偷
2006/10/09 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
discuz目录文件资料汇总
2014/12/30 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
Python判断Abundant Number的方法
2015/06/15 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
python利用smtplib实现QQ邮箱发送邮件
2020/05/20 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
python里dict变成list实例方法
2019/06/26 Python
python函数不定长参数使用方法解析
2019/12/14 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
美国智能家居专家:tink
2019/06/04 全球购物
这段代码难道不该打印出56吗
2013/02/27 面试题
struct和class的区别
2015/11/20 面试题
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
2014年妇产科工作总结
2014/12/08 职场文书
初婚初育证明范本
2015/06/18 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL
Python学习之时间包使用教程详解
2022/03/21 Python