微信小程序实现吸顶效果


Posted in Javascript onJanuary 08, 2020

最开始的时候,在小程序中实现吸顶效果,开发工具看起来还挺好的,但是在真机上就会有问题了。 原因是我不停的去 setData 会导致操作反馈延迟严重,无法及时将操作处理结果及时传递到视图层。

微信小程序实现吸顶效果

后面就对代码进行了调整,避免不停的去setData

效果图

吸顶前

微信小程序实现吸顶效果

吸顶后

微信小程序实现吸顶效果

代码部分

wxml

<view style="width: 90%; height: 300rpx; background: #f0f0f0; margin: 30rpx auto;"></view>
<view style="width: 90%; height: 300rpx; background: #f0f0f0; margin: 30rpx auto;"></view>


<view class="navbar-wrap">
 <view class="column {{isFixedTop?'fixed':''}}" id="navbar">
  <view class="block active">新品推荐</view>
  <view class="block">限时优惠</view>
  <view class="block">火爆热搜</view>
  <view class="block">猜你喜欢</view>
 </view>
 <!-- 用于吸顶后 占位用的 -->
 <view class="column" wx:if="{{isFixedTop}}"></view>
</view>


<block wx:for="{{20}}" wx:key="list">
 <view style="width: 100%; height: 120rpx; background: #f0f0f0; margin: 20rpx auto;"></view>
</block>

wxss

view, text {
 box-sizing: border-box;
 -moz-box-sizing: border-box;
 -webkit-box-sizing: border-box;
}

.navbar-wrap {
 width: 100%;
}

.navbar-wrap .column {
 width: 100%;
 height: 80rpx;
 display: flex;
 flex-direction: row;
 align-items: center;
 justify-content: space-around;
 background: #fff;
 border-bottom: solid 1px #eee;

 top: 0;
 left: 0;
 z-index: 100;
}

.navbar-wrap .column.fixed {
 position: fixed;
}

/* 以下的代码不重要 */

.navbar-wrap .column .block {
 width: 25%;
 height: 80rpx;
 line-height: 80rpx;
 text-align: center;
 font-size: 30rpx;
 color: #333;
 letter-spacing: 1px;
 position: relative;
}

.navbar-wrap .column .block::after {
 content: "";
 width: 60%;
 height: 3px;
 border-radius: 2px;
 position: absolute;
 bottom: 0;
 left: 50%;
 transform: translateX(-50%);
 background: transparent;
}

.navbar-wrap .column .block.active {
 color: #1490ce;
 font-weight: bold;
}

.navbar-wrap .column .block.active::after {
 background: linear-gradient(160deg, rgba(8, 220, 230, 0.7) 10%, rgba(0, 140, 255, 0.7) 90%);
}

js

Page({
 data: {
  navbarInitTop: 0, //导航栏初始化距顶部的距离
  isFixedTop: false, //是否固定顶部
 },

 /**
  * 生命周期函数--监听页面加载
  */
 onLoad: function(options) {

 },

 /**
  * 生命周期函数--监听页面显示
  */
 onShow: function() {
  var that = this;

  if (that.data.navbarInitTop == 0) {

   //获取节点距离顶部的距离
   wx.createSelectorQuery().select('#navbar').boundingClientRect(function(rect) {
    if (rect && rect.top > 0) {
     var navbarInitTop = parseInt(rect.top);
     that.setData({
      navbarInitTop: navbarInitTop
     });
    }
   }).exec();

  }
 },

 /**
  * 监听页面滑动事件
  */
 onPageScroll: function(e) {
  var that = this;
  var scrollTop = parseInt(e.scrollTop); //滚动条距离顶部高度

  //判断'滚动条'滚动的距离 和 '元素在初始时'距顶部的距离进行判断
  var isSatisfy = scrollTop >= that.data.navbarInitTop ? true : false;
  //为了防止不停的setData, 这儿做了一个等式判断。 只有处于吸顶的临界值才会不相等
  if (that.data.isFixedTop === isSatisfy) {
   return false;
  }

  that.setData({
   isFixedTop: isSatisfy
  });
 }


})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
文字幻灯片
Jun 26 Javascript
Javascript 面向对象 命名空间
May 13 Javascript
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
Apr 27 Javascript
点击页面其它地方隐藏该div的两种思路
Nov 18 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
Nov 27 Javascript
js删除数组中某几项的方法总结
Jan 16 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
Apr 11 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
Aug 08 Javascript
小程序表单认证布局及验证详解
Jun 19 Javascript
vue-router 按需加载 component: () =&gt; import() 报错的解决
Sep 22 Javascript
JS实现吸顶特效
Jan 08 #Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
Jan 07 #Javascript
electron+vue实现div contenteditable截图功能
Jan 07 #Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
Jan 07 #Javascript
Vue程序化的事件监听器(实例方案详解)
Jan 07 #Javascript
微信小程序服务器日期格式化问题
Jan 07 #Javascript
webpack 最佳配置指北(推荐)
Jan 07 #Javascript
You might like
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
js charAt的使用示例
2014/02/18 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
在vue中使用Base64转码的案例
2020/08/07 Javascript
python实现跨文件全局变量的方法
2014/07/07 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
python实现简易内存监控
2018/06/21 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
python 实现简单的FTP程序
2019/12/27 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
少年闰土教学反思
2014/02/22 职场文书
公司介绍信范文
2015/01/31 职场文书
承诺书模板大全
2015/05/04 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
导游词之千岛湖
2019/09/23 职场文书