微信小程序导航栏滑动定位功能示例(实现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 相关文章推荐
document.getElementById为空或不是对象的解决方法
Jan 24 Javascript
常用一些Javascript判断函数
Aug 14 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
Dec 17 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
Feb 13 Javascript
jQuery插件制作之参数用法实例分析
Jun 01 Javascript
判断访客终端类型集锦
Jun 05 Javascript
有关JavaScript中call()和apply() 的一些理解
May 20 Javascript
JS简单实现点击复制链接的方法
Aug 03 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
Aug 24 Javascript
React Router V4使用指南(精讲)
Sep 17 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
Sep 20 Javascript
JavaScript 中for/of,for/in 的详细介绍
Nov 17 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
浅析javascript 定时器
2014/12/23 Javascript
js实现仿阿里巴巴城市选择框效果实例
2015/06/24 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
python如何统计序列中元素
2020/07/31 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
python opencv读mp4视频的实例
2018/12/07 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
美国在线宠物商店:Chewy
2019/01/12 全球购物
网上蛋糕店创业计划书
2014/01/24 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
集中整治工作方案
2014/05/01 职场文书
秋冬农业生产标语
2014/10/09 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
小组口号霸气押韵
2015/12/24 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
js前端图片加载异常兜底方案
2022/06/21 Javascript