微信小程序导航栏滑动定位功能示例(实现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 相关文章推荐
Javascript的一种模块模式
Mar 22 Javascript
jquery显示和隐藏div特效实例
Feb 27 Javascript
jQuery实现表头固定效果的实例代码
May 24 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
Jun 03 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
Nov 03 Javascript
JS实现倒计时(天数、时、分、秒)
Nov 16 Javascript
JS查找字符串中出现最多的字符及个数统计
Feb 04 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
Sep 07 Javascript
详解vue几种主动刷新的方法总结
Feb 19 Javascript
vue引入静态js文件的方法
Jun 20 Javascript
node.js文件的复制、创建文件夹等相关操作
Feb 05 Javascript
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
May 18 Vue.js
在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
基于PHP与XML的PDF文档生成技术
2006/10/09 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
php命名空间学习详解
2014/02/27 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
2012/10/18 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
python函数装饰器用法实例详解
2015/06/04 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Python装饰器语法糖
2019/01/02 Python
python实现串口通信的示例代码
2020/02/10 Python
基于python实现删除指定文件类型
2020/07/21 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
python 图像增强算法实现详解
2021/01/24 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
入党思想汇报
2014/01/05 职场文书
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫