分类搜索导航栏,需要实现的是:壁纸分类可以横向滑动,点击分类搜索对应分类的壁纸图片;当页面向下滚动到分类搜索导航栏时,此导航栏需停靠在页面顶部,显示吸顶效果,而当页面向上滚动到分类搜索导航栏时,此导航栏恢复原位。
提到横向滑动,很自然想到用scroll-view组件实现。下面首先进入pages/index/index.wxml文件中,编写布局代码如下:
<!-- 分类导航栏 -->
<scroll-view scroll-x="{{true}}" class="menubar {{cat_is_fixed?'fixed':''}}">
<view class="menu">
<!-- 遍历壁纸分类列表 -->
<block wx:for="{{cate_list}}" wx:key="id">
<!-- 分类显示,如果分类id等于当前当前选中壁纸分类id,则显示选中状态(添加active样式) -->
<text class="{{item.id==curr_cate_id?'active':''}}" bindtap="ev_cat_search" data-id="{{item.id}}" data-index="{{index}}">{{item.name}}</text>
</block>
</view>
</scroll-view>
接下来,进入pages/index/index.wxss文件中,编写样式代码如下:
/* 分类导航栏容器样式 */
.menubar {
height: 82rpx;
white-space: nowrap;/* 文本不会换行 */
display: flex;/* flex布局 */
}
/* 分类导航栏吸顶样式 */
.menubar.fixed {
position: fixed;/* 固定、停靠定位 */
top: 0px;/* 距离顶部位置 */
z-index: 100;/* 垂直方向层级,数字越大越靠前 */
border-top: 2rpx solid rgb(226, 226, 226);/* 上边框样式 */
}
/* 分类导航栏菜单样式 */
.menu {
width: 100%;
height: 82rpx;
line-height: 82rpx;/* 行高 */
}
/* 分类导航栏菜单文本样式 */
.menu text {
background-color: #fff;
display: inline-block;/* 行内块元素 */
width: 138rpx;
font-size: 28rrpx;
color: rgb(153, 153, 153);
height: 100%;
text-align: center;
box-sizing: border-box;
border-bottom: 2rpx solid rgb(226, 226, 226);/* 下边框样式 */
}
/* 分类导航栏菜单选中文本样式 */
.menu text.active {
color: rgb(35, 158, 254);
}
在上面代码中,吸顶样式(.fixed)的关键在于:使用fixed定位(position: fixed;),以此实现固定停靠在页面顶部显示。
最后,进入pages/index/index.js文件中,编写相关的逻辑代码如下:
Page({
data: {
/**
* 分类导航栏是否是“吸顶”效果
*/
cat_is_fixed: false,
/**
* 壁纸分类列表
*/
cate_list:[],
/**
* 当前选中壁纸分类id,默认:-1
*/
curr_cate_id:-1
},
/**
* 页面滚动触发事件
* [@param](/user/param) {*} e
*/
onPageScroll: function (e) {
//获取分类导航栏是否是“吸顶”效果
let cat_is_fixed = this.data.cat_is_fixed;
//如果页面滑动高度大于等于135(分类导航栏默认距离顶部的高度,此高度值是在开发模拟器下获取测算的偷懒做法)
if (e.scrollTop >= 135) {
//显示“吸顶”效果
!cat_is_fixed && this.setData({
cat_is_fixed: true
});
} else {
//取消“吸顶”效果,还原分类导航栏默认显示
cat_is_fixed && this.setData({
cat_is_fixed: false
});
}
},
/**
* 分类(点击)搜索事件
* [@param](/user/param) {*} e
*/
ev_cat_search: function (e) {
//获取当前点击分类菜单的自定义数据:分类id
let cate_id = e.currentTarget.dataset.id;
//更新页面数据:当前选中壁纸分类id
this.setData({
curr_cate_id: cate_id
});
//请求数据接口,加载壁纸列表
this.default_load();
}
});
在上面代码中,通过onPageScroll页面滚动事件,获取当前页面滚动高度,跟分类搜索导航栏(默认)距离页面顶部的高度做比较,进行吸顶效果的切换效果。所以,吸顶效果实现并不复杂,通过几行样式和逻辑代码即可搞定。
好了,今天的分享就到这里,希望对你有所帮助!如果想获取壁纸小程序源码,可前往文章《小程序开发者福利!高清壁纸推荐微信小程序源码开源啦!!!》查看。