小程序左右滑动切换标签页

微信   2024-12-26 19:58   92   0  

43189_g5jv_1136.png

index.wxml

<navigation-bar title="滑动切换标签页" back="{{false}}" color="black" background="#FFF"></navigation-bar>
<!-- pages/index/index.wxml -->
<view class="container">
    <!-- 自定义Tab导航 -->
    <view class="tabs">
        <block wx:for="{{tabs}}" wx:key="index" wx:for-item="tab">
            <view 
                bindtap="switchTab"
                data-index="{{index}}"
                class="tab-item {{currentTab === index ? 'active' : ''}}" 
                bindtap="switchTab" 
                data-index="{{index}}"
            >
                {{tab.title}}
            </view>
        </block>
    </view>

    <!-- swiper组件实现滑动 -->
    <swiper 
        bindchange="swiperChange" 
        current="{{currentTab}}"
        circular
    >
        <block wx:for="{{tabs}}" wx:key="index">
            <swiper-item>
                <!-- 这里放置每个Tab对应的内容 -->
                <view class="swiper-content">
                    {{item.content}}
                </view>
                <scroll-view scroll-y style="height: 100%;">
                    <view class="list-item" wx:for="{{item.datalist}}" wx:for-item="content">{{content}}</view>
                    <view class="list-item"></view>
                </scroll-view>
            </swiper-item>
        </block>
    </swiper>
</view>


index.js

Page({
  data: {
      // 初始化Tab数据  
      tabs: [
          {
              title: 'Tab 1',
              content: '这是Tab 1的内容',
              datalist: []
          },
          {
              title: 'Tab 2',
              content: '这是Tab 2的内容',
              datalist: []
          },
          {
              title: 'Tab 3',
              content: '这是Tab 3的内容',
              datalist: []
          }
      ],
      currentTab: 0,
  },

  // 切换Tab  
  switchTab: function (e) {
      const index = e.currentTarget.dataset.index;
      this.setData({
          currentTab: index
      });
  },

  // swiper组件的滑动改变事件  
  swiperChange: function (e) {
      const { current } = e.detail;
      this.setData({
          currentTab: current
      });
  },

  onLoad: function (){
      this.data.tabs.forEach(e => {
          let total = Math.ceil(Math.random() * 20 + 20);
          for(let i = 0; i < total; ++i) {
              e.datalist.push('data: ' + String(i))
          }
          e.content = `共${e.datalist.length}条数据`
      })
      this.setData({tabs: this.data.tabs})
  }
})


index.wxss

page {
  display: flex;
  flex-direction: column;
  height: 100vh;
  box-sizing: border-box;
}

.container {
  box-sizing: border-box;
  height: 100%;
  padding: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
}

.tabs {
  display: flex;
  justify-content: space-around;
  width: 100%;
  margin-bottom: 10px;
}

.tab-item {
  padding: 10px 20px;
  border-bottom: 2px solid transparent;
}

.tab-item.active {
  border-bottom-color: #007aff;
  color: #007aff;
}

.swiper-content {
  /* 内容样式,根据需要自定义 */
  text-align: center;
  padding: 20px;
  background-color: #eee;
}

swiper {
  height: 100%;
  width: 100%;
}

.list-item {
  padding: 20px;
  border: 1px solid black;
}
.list-item:last-child{
  padding-bottom: 100rpx;
}


来源:https://blog.csdn.net/metlin/article/details/140595721

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