微信小程序实现吸顶效果


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 相关文章推荐
Javascript 不能释放内存.
Sep 07 Javascript
onbeforeunload与onunload事件异同点总结
Jun 24 Javascript
js中onload与onunload的使用示例
Aug 25 Javascript
javascript 获取iframe里页面中元素值的方法
Feb 17 Javascript
js实现带圆角的多级下拉菜单效果
Aug 28 Javascript
js实现彩色条纹滚动条效果
Mar 15 Javascript
详解Weex基于Vue2.0开发模板搭建
Mar 20 Javascript
jQuery 实现双击编辑表格功能
Jun 19 jQuery
微信小程序 转发功能的实现
Aug 04 Javascript
Node.js 的模块知识汇总
Aug 16 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
Aug 24 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 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生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
2020/08/06 PHP
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
python批量导出导入MySQL用户的方法
2013/11/15 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
python交互式图形编程实例(一)
2017/11/17 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
简单了解python模块概念
2018/01/11 Python
python用户管理系统
2018/03/13 Python
Python检测网络延迟的代码
2018/05/15 Python
详解Python locals()的陷阱
2019/03/26 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
养殖项目策划书范文
2014/01/13 职场文书
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
《月迹》教学反思
2014/02/19 职场文书
毕业生见习报告总结
2014/11/08 职场文书
旷工辞退通知书
2015/04/17 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android