微信小程序实现吸顶效果


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 三种不同位置代码的写法
Oct 25 Javascript
jquery 可拖拽的窗体控件实现代码
Mar 21 Javascript
javascript间隔刷新的简单实例
Nov 14 Javascript
jQuery实现新消息在网页标题闪烁提示
Jun 23 Javascript
浅谈jQuery中height与width
Jul 06 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
利用Console来Debug的10个高级技巧汇总
Mar 26 Javascript
基于JS实现html中placeholder属性提示文字效果示例
Apr 19 Javascript
vue项目部署上线遇到的问题及解决方法
Jun 10 Javascript
vue实现商品列表的添加删除实例讲解
May 14 Javascript
Vue toFixed保留两位小数的3种方式
Oct 23 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
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
用js做一个小游戏平台 (一)
2009/12/29 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
Python实现的递归神经网络简单示例
2017/08/11 Python
简单了解Python中的几种函数
2017/11/03 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
财务与信息服务专业推荐信
2013/11/28 职场文书
医学院毕业生自荐信范文
2014/03/06 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
员工离职感谢信
2015/01/22 职场文书
品德与社会教学反思
2016/02/24 职场文书
财务年终工作总结大全
2019/06/20 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python