在.js文件中使用page的onPageScroll事件和scroll-view的scroll事件中产生卡顿 (setData 渲染会阻塞其它脚本执行,导致了整个用户交互的动画过程会有延迟), 所以使用wxs响应事件来实现吸顶效果。wxs响应事件基础库 2.4.4 开始支持,低版本需做兼容处理。
附上文档链接:wxs响应事件
吸顶效果
使用scroll-view组件实现滚动效果,页面和scroll-view组件的高度设成100%,当竖向滚动条大于等于导航到顶部距离时,导航变成固定定位,固定显示在顶部,反之,导航取消定位。
{{item}} 第{{index}}部分
page{
font-size: 30rpx;
background: #fea;
height: 100%;
}
.div{
width: 100%;height: 500rpx;
}
.nav-image{
width: 100%;height: 400rpx;
vertical-align: middle;
}
.navigation{
width: 100%;
height: 100rpx;
display: flex;
justify-content: center;
align-items: center;
background: #fff;
top:0;left:0;
}
.navigation view{
padding: 15rpx 20rpx;
margin: 0 20rpx;
}
//wxs文件
var scrollEvent = function (e, ins) {
var scrollTop = e.detail.scrollTop;
var navTop = e.currentTarget.dataset.top;
if (scrollTop >= navTop) {
ins.selectComponent('.navigation').setStyle({
"position": 'fixed'
})
} else {
ins.selectComponent('.navigation').setStyle({
"position": 'static'
})
}
}
module.exports = {
scrollEvent: scrollEvent
}
//js文件
Page({
data: {
navBarList: ['喜欢', '点赞', '收藏'],
navTop:0, //导航距顶部距离
},
onLoad: function (options) {
this.getNavTop();
},
getNavTop() {
var that = this;
var query = wx.createSelectorQuery();
query.select('.navigation').boundingClientRect(function (data) {
that.setData({
navTop: data.top,
})
}).exec();
},
})
渐变导航效果
当竖向滚动条滚动到指定位置时,出现导航条,导航条透明度也随滚动条位置发生变化。
我是导航条 第{{index}}部分
page{font-size: 30rpx;background: rgba(200, 58, 57, 0.3);height: 100%;}
.div{width: 100%;height: 500rpx;}
.nav-image{width: 100%;height: 400rpx;vertical-align: middle;}
.nav-icon,.nav-bar{
position: fixed;
top: 0;left: 0;
height: 120rpx;
}
.nav-bar{
width: 100%;
display: flex;
align-items: center;
background: #fff;
}
.back-icon{
width: 100rpx;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.back-icon::after{
content: "";
display: block;
width: 25rpx;height: 25rpx;
border-top: 5rpx solid #fff;
border-left: 5rpx solid #fff;
transform: rotate(-45deg);
}
.nav-bar .back-icon::after{border-color: #000;}
//wxs文件
var scrollEvent=function(e,ins){
var scrollTop=e.detail.scrollTop;
if(scrollTop>100){
ins.selectComponent(".nav-icon").setStyle({
"opacity":"0"
})
var dot = (scrollTop-100)/50;
ins.selectComponent(".nav-bar").setStyle({
"opacity": dot
})
}else{
ins.selectComponent(".nav-bar").setStyle({
"opacity": "0"
})
var dot = (100-scrollTop) / 50;
ins.selectComponent(".nav-icon").setStyle({
"opacity": dot
})
}
};
module.exports={
scrollEvent: scrollEvent
};
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



