小程序页面上下滚动左右滑动 | 熊阿哥博客

小程序页面上下滚动左右滑动

微信   2024-12-28 10:38   87   0  

前言

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

9679_0w9u_7036.gif

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

9750_8eo3_2533.png

基础调试库 2.12.2

9794_suj1_9288.png

基础调试库 2.12.2

9833_huqw_5153.png

因为 page 标签突然多了几个属性,变成了绝对定位,故修改了 page 的 position 属性值为默认值。

总结

使用 swiper 实现滑动会渲染非常多组件。例如:滑动50个页面,那么需要渲染50个页面,滑动频繁了页面会卡死,而且,渲染50个页面,也很浪费性能,下一节进行讲解并优化。

page 出现的属性不同问题,百思不得其解。


原文链接:https://blog.csdn.net/harmsworth2016/article/details/108655253


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。