2018/7/20 0:00:00
泉源:不详
作者:未知
许多APP都有这么一个效果,,,列表头在转动到顶部时会悬停在顶部,,,好比在iOS开发中UITableview设置 style 属性设置为 Plain ,,,这个tableview的section header在转动时会默认悬停在界面顶端。。。。。。
那么我们怎么在微信小程序也实现这么一个效果呢??????

首先写一个很是简朴列表:
wxml代码
-
<view class='header'>这里是header</view>
-
<view class='section-header'>这是section-header</view>
-
<block wx:for="{{testData}}">
-
<view class='section-cell'>{{item}}</view>
-
</block>
wxss代码
-
.header {
-
height: 300rpx;
-
width: 750rpx;
-
background-color: bisque;
-
margin-bottom: 10rpx;
-
}
-
-
.section-header {
-
height: 80rpx;
-
width: 750rpx;
-
background-color: rebeccapurple;
-
}
-
-
.section-cell {
-
height: 180rpx;
-
width: 750rpx;
-
background-color: gold;
-
margin-top: 10rpx;
-
}

简朴列表效果.png 那我们要怎么样让头部悬停呢??????
1、我们需要在页面结构完成后获取到头部的位置:
在onReady要领中,,,盘问section-header节点并拿到该节点此时距离目今顶部的距离
注重是 此时,,,这个后面再讲
-
/**
-
* 页面加载完成
-
*/
-
onReady: function () {
-
let that = this
-
let query = wx.createSelectorQuery()
-
query.select(".section-header").boundingClientRect(function (res) {
-
// console.log(res)
-
that.setData({
-
//section header 距离 ‘目今顶部’ 距离
-
sectionHeaderLocationTop: res.top
-
})
-
}).exec()
-
},
2、我们需要监听页面转动:
fixed用来控制是否悬停
-
/**
-
* 页面转动监听
-
*/
-
onPageScroll: function (e) {
-
//console.log(e)
-
this.setData({
-
scrollTop: e.scrollTop
-
})
-
if (e.scrollTop > this.data.sectionHeaderLocationTop) {
-
this.setData({
-
fixed: true
-
})
-
} else {
-
this.setData({
-
fixed: false
-
})
-
}
-
},
3、修改响应的样式:
将原来的header修改为如下代码,,,并添加一个placeholder视图,,,目的是当pp电子section-header视图悬停时,,,坚持占位,,,阻止页面颤抖
-
<view class='{{fixed ? "section-header section-fixed": "section-header"}}'>这是section-header</view>
-
<view hidden='{{!fixed}}' class="section-header section-placeholder"></view>
增添wxss代码
-
.section-placeholder {
-
background-color: white;
-
}
-
-
.section-fixed {
-
position: fixed;
-
top: 0;
-
}
附上js data 代码:
-
data: {
-
testData:[1,2,3,4,5,6,7,8,9,10],
-
//section header 距离 ‘目今顶部’ 距离
-
sectionHeaderLocationTop: 0,
-
//页面转动距离
-
scrollTop: 0,
-
//是否悬停
-
fixed: false
-
},
此时我们需要的效果就实现了:

sectionHeader悬浮.gif 这个有一个要注重的点,,,我们在使用swlectorQuery()的时间,,,获取到的top是目今挪用改函数时响应节点对应目今顶部的距离,,,这就有一个问题,,,当pp电子header的高度(纷歧定是header只要是section-header上面的视图的高度)爆发转变的时间,,,悬停就会有问题,,,由于pp电子高度是最最先的时间获取的。。。。。。
以是在我们改变高度之后,,,要再次挪用该函数去获取距离"目今顶部"的距离,,,这也是要注重的一个点,,,若是我能直接再次获取并赋值,,,发明照旧有问题,,,就是由于此时获取的top不是距离整个page页面顶部,,,而我们监听的页面转动却是,,,以是我们可以修改代码如下:
-
let that = this
-
let query = wx.createSelectorQuery()
-
query.select(".section-header").boundingClientRect(function (res) {
-
// console.log(res)
-
that.setData({
-
//section header 距离 ‘目今顶部’ 距离
-
sectionHeaderLocationTop: res.top + that.data.scrollTop
-
})
-
}).exec()
加上此时页面转动的距离,,,则能包管我们预期的效果泛起
小程序工具提供多类型商城/门店小程序制作,,,可视化编辑 1秒天生5步上线。。。。。。通过拖拽、拼接??????榻峁剐〕绦蛏坛且趁,,,所看即所得,,,只需要美工就能做出细腻商城。。。。。。更多小程序市肆请审查:小程序市肆
【本站声明】
1、本站文章中所选用的图片及文字泉源于网络以及用户投稿,,,由于未联系到知识产权人或未发明有关知识产权的挂号,,,若有知识产权人并不肯意我们使用,,,若是有侵权请连忙联系。。。。。。
2、本网站差池文章中所涉及的内容真实性、准确性、可靠性认真,,,仅系客观性形貌,,,如您需要相识该类商品/服务详细的资讯,,,请您直接与该类商品/服务的提供者联系。。。。。。
KESION pp电子软件
KESION pp电子软件是海内领先的在线教育软件及私域社交电商软件服务提供商,,,恒久专注于为企业提供在线教育软件及社交电商SaaS平台解决方案。。。。。。
公司焦点产品云开店SaaS社交电商服务平台、在线教育SaaS服务平台、教育企业数字化SaaS云平台、企微营销助手、私有化自力安排品牌网校和在线教育咨询等。。。。。。KESION 一直通过手艺立异,,,提供产品和服务,,,助力企业向数字化转型,,,通过科技驱动商业刷新,,,让商业变得更智慧!