微信小程序实现吸顶效果


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 相关文章推荐
Wordpress ThickBox 添加“查看原图”效果代码
Dec 11 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
Jan 06 Javascript
js中string转int把String类型转化成int类型
Aug 13 Javascript
Javascript的this用法
Jan 16 Javascript
原生js实现form表单序列化的方法
Aug 02 Javascript
分享vue里swiper的一些坑
Aug 30 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
Feb 20 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
Oct 25 Javascript
微信小程序实现页面浮动导航
Jan 08 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
Jun 05 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
Sep 17 Javascript
js实现点击烟花特效
Oct 14 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生成Gif图片验证码
2013/10/27 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
asp.net和php的区别点总结
2019/10/10 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
python中list列表的高级函数
2016/05/17 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
大三在校生电子商务求职信
2013/10/29 职场文书
生产班组长岗位职责
2014/01/05 职场文书
合作协议书范本
2014/04/17 职场文书
小学爱国卫生月活动总结
2014/06/30 职场文书
六一儿童节活动总结
2014/08/27 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL