微信小程序导航栏滑动定位功能示例(实现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 相关文章推荐
疯掉了,尽然有js写的操作系统
Apr 23 Javascript
js或css文件后面跟参数的原因说明
Jan 09 Javascript
基于jquery的direction图片渐变动画效果
May 24 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
Jun 10 Javascript
jQuery实现简单的网页换肤效果示例
Sep 18 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
JS中闭包的经典用法小结(2则示例)
Dec 28 Javascript
详解Vue CLI 3.0脚手架如何mock数据
Nov 23 Javascript
JQuery Ajax执行跨域请求数据的解决方案
Dec 10 jQuery
使用Promise封装小程序wx.request的实现方法
Nov 13 Javascript
封装一下vue中的axios示例代码详解
Feb 16 Javascript
js实现树形数据转成扁平数据的方法示例
Feb 27 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
在PHP中利用XML技术构造远程服务(下)
2006/10/09 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
php使用google地图应用实例
2014/12/31 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
JavaScript中的其他对象
2008/01/16 Javascript
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中线程编程之threading模块的使用详解
2015/06/23 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
Django REST framework 视图和路由详解
2019/07/19 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
Django继承自带user表并重写的例子
2019/11/18 Python
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
团拜会策划方案
2014/06/07 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL
Python绘画好看的星空图
2022/03/17 Python