前言
最近需要完成一个小程序页面头部、底部固定;页面中间部分上下滚动、左右滑动的需求,效果如下:

test.js
// test.js
Component({
data: {
quesArr: [
{
currentGcolor: '#ccc',
currentGscore: 3,
currentFcolor: '#0AC013',
currentFscore: 5,
typeName: '单选题'
},
{
currentGcolor: '#ccc',
currentGscore: 0,
currentFcolor: '#0AC013',
currentFscore: 5,
typeName: '多选题'
},
{
currentGcolor: '#0AC013',
currentGscore: 5,
currentFcolor: '#0AC013',
currentFscore: 5,
typeName: '判断题'
},
],
currentTab: 0,
},
methods: {
switchTab (e){
if (e.detail.source === 'touch') {
let cur = e.detail.current;
this.setData({
currentTab: cur,
});
}
},
},
})
test.wxml
<!--test.wxml-->
<view class="top_wrap box flexbox_y flexbox_between">
{{quesArr[currentTab].typeName}}
</view>
<view class="center_wrap maxw ova">
<swiper current="{{currentTab}}" bindanimationfinish="switchTab" class="maxh">
<swiper-item wx:for="{{quesArr}}" wx:for-index="idx" wx:key="subNum">
<scroll-view scroll-y class="maxh">
<view class="center_view box">
<view class="item">{{idx}}-1</view>
<view class="item">2</view>
<view class="item">3</view>
<view class="item">4</view>
<view class="item">5</view>
<view class="item">6</view>
<view class="item">1</view>
<view class="item">2</view>
<view class="item">3</view>
<view class="item">4</view>
<view class="item">5</view>
<view class="item">6</view>
</view>
</scroll-view>
</swiper-item>
</swiper>
</view>
<view class="foot_wrap box flexbox_y flexbox_between">
<view>得分:<text style="color: {{quesArr[currentTab].currentGcolor}}">{{quesArr[currentTab].currentGscore}}</text><text style="color: {{quesArr[currentTab].currentFcolor}}">/{{quesArr[currentTab].currentFscore}}</text></view>
<view>{{currentTab + 1}}<text class="sch-ccc">/{{quesArr.length}}</text></view>
</view>
test.wxss
page{
position: static;
}
.top_wrap{
height: 106rpx;
color: #333;
padding: 0 36rpx;
border-bottom: 2rpx solid #E8E8E8;
position: fixed;
top: 0;
width: 100%;
z-index: 1;
}
.center_wrap{
position: fixed;
top: 108rpx;
bottom: 120rpx;
z-index: -1;
}
.center_wrap .item{
height: 300rpx;
margin: 15rpx;
}
.center_view{
padding: 30rpx 36rpx;
}
.foot_wrap{
height: 118rpx;
color: #333;
padding: 0 36rpx;
border-top: 2rpx solid #E8E8E8;
position: fixed;
bottom: 0;
width: 100%;
z-index: 1;
}
.flexbox_y {
display: flex;
align-items: center;
}
.flexbox_between{
display: flex;
justify-content: space-between;
}
.maxh{
height: 100%;
}
.maxw{
width: 100%;
}
.box{
box-sizing: border-box;
}
.sch-ccc{
color: #ccc;
}
.ova{
overflow: auto;
}
疑问
page 标签的默认属性有变化?
调试基础库 2.12.1

基础调试库 2.12.2

基础调试库 2.12.2

因为 page 标签突然多了几个属性,变成了绝对定位,故修改了 page 的 position 属性值为默认值。
总结
使用 swiper 实现滑动会渲染非常多组件。例如:滑动50个页面,那么需要渲染50个页面,滑动频繁了页面会卡死,而且,渲染50个页面,也很浪费性能,下一节进行讲解并优化。
page 出现的属性不同问题,百思不得其解。
原文链接:https://blog.csdn.net/harmsworth2016/article/details/108655253