
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