微信小程序导航栏滑动定位功能示例(实现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判断输入是否为正整数、浮点数等数字的函数代码
Nov 17 Javascript
基于JQuery实现的Select级联
Jan 27 Javascript
js检测浏览器版本、核心、是否移动端示例
Apr 24 Javascript
jQuery中:file选择器用法实例
Jan 04 Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
Sep 20 Javascript
JS从非数组对象转数组的方法小结
Mar 26 Javascript
Vue单页应用引用单独的样式文件的两种方式
Mar 30 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
Jun 13 Javascript
ES6 Promise对象的含义和基本用法分析
Jun 14 Javascript
angular组件间传值测试的方法详解
May 07 Javascript
详解javascript void(0)
Jul 13 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
php 定界符格式引起的错误
2011/05/24 PHP
WordPress中使主题支持小工具以及添加插件启用函数
2015/12/22 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
js下弹出窗口的变通
2007/04/18 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
tensorflow输出权重值和偏差的方法
2018/02/10 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
专业技术职务聘任书
2014/03/29 职场文书
工厂见习报告范文
2014/10/31 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
个人工作违纪检讨书
2015/05/05 职场文书