微信小程序导航栏滑动定位功能示例(实现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 Function对象扩展之延时执行函数
Jul 06 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
Apr 26 Javascript
open 动态修改img的onclick事件示例代码
Nov 13 Javascript
Jquery Post处理后不进入回调的原因及解决方法
Jul 15 Javascript
jquery判断密码强度的验证代码
Apr 22 Javascript
深入理解Vue transition源码分析
Jul 30 Javascript
详解vue mixins和extends的巧妙用法
Dec 20 Javascript
vue 中filter的多种用法
Apr 26 Javascript
vue实现压缩图片预览并上传功能(promise封装)
Jan 10 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
Jul 10 jQuery
在博客园博文中添加自定义右键菜单的方法详解
Feb 05 Javascript
javascript实现移动端上传图片功能
Aug 18 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常用Output和ptions/Info函数集介绍
2013/06/19 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
全面了解Python环境配置及项目建立
2016/06/30 Python
python如何获取服务器硬件信息
2017/05/11 Python
python+mysql实现教务管理系统
2019/02/20 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
Python批量启动多线程代码实例
2020/02/18 Python
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
普天C++笔试题
2016/03/20 面试题
华为c/c++笔试题
2016/01/25 面试题
建筑学推荐信
2013/11/03 职场文书
高校毕业生登记表自我鉴定
2013/11/03 职场文书
战友聚会邀请函
2014/01/18 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
少先队活动总结
2014/08/29 职场文书
教师节倡议书
2014/08/30 职场文书
小学中等生评语
2014/12/29 职场文书
清洁工工作总结
2015/08/11 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python