微信小程序实现tab切换和数据列表
问题背景
上篇文章介绍了微信小程序实现tab切换的一种方案(参考 https://blog.51cto.com/baorant24/6188157 ),感觉代码不是很精简,本文再用一个demo介绍微信小程序如何实现tab切换和数据列表。
问题分析
微信小程序对应页面文件结构如下:
问题解决
话不多说,直接上代码: (1)index.js文件,代码如下:
// pages/healdata/healthydata.ts
Page({
/**
* 页面的初始数据
*/
data: {
currentIndex: 0, //默认是活动项
home: "#979797",
find: "#979797",
services: "#00c2a5",
mind: "#979797",
homeChoose: false,
findChoose: false,
servicesChoose: true,
mindChoose: false,
msg: {},//消息数
noNewMsg: true,//true表示新有新消息
servicesAppiontData: [//服务预约数据列表
{
}],
listItem: [
{
"deptId": 2098494533,
"packageId": 1,
"packageName": "院内服务",
"services": [
{
"serviceId": 1,
"deptId": 2098494533,
"brandName": "PICC护理",
"serviceType": "1"
},
{
"serviceId": 2,
"deptId": 2098494533,
"brandName": "压疮护理",
"serviceType": "1"
},
{
"serviceId": 3,
"deptId": 2098494533,
"brandName": "导尿管护理",
"serviceType": "1"
},
{
"serviceId": 4,
"deptId": 2098494533,
"brandName": "胃管护理",
"serviceType": "1",
}
]
},
{
"deptId": 2098494533,
"packageId": 2,
"packageName": "中医服务",
"services": [
{
"serviceId": 7,
"deptId": 2098494533,
"brandName": "失眠",
"serviceType": "2"
},
{
"serviceId": 8,
"deptId": 2098494533,
"brandName": "便秘",
"serviceType": "2"
},
{
"serviceId": 9,
"deptId": 2098494533,
"brandName": "颈椎病",
"serviceType": "2"
}
]
},
{
"deptId": 2098494533,
"packageId": 2,
"packageName": "中医服务",
"services": [
{
"serviceId": 10,
"deptId": 2098494533,
"brandName": "便秘",
"serviceType": "2"
},
{
"serviceId": 11,
"deptId": 2098494533,
"brandName": "颈椎病",
"serviceType": "2"
}
]
},
],//数据列表数据
patintIdS: ''
},
/**
* 生命周期函数--监听页面加载
*/
onl oad() {
},
//点击tab时触发
titleClick: function (e) {
this.setData({
//拿到当前索引并动态改变
currentIndex: e.currentTarget.dataset.idx
})
// console.log("======拿到当前索引并动态改变=dddd======")
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
wx.hideHomeButton()
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})
(2)index.json文件,代码如下:
{
"usingComponents": {},
"navigationBarTitleText": "分类列表",
"navigationStyle": "custom"
}
(3)index.wxml文件,代码如下:
<!-- 头部搜索 -->
<view class="title_search">
</view>
<!-- 头部搜索 -->
<!-- Tab布局 -->
<view catchtouchmove='true'>
<view class='navBox'>
<view class='titleBox1' id="allaid" bindtap='titleClick' data-idx='0'>
<text class="{{0 == currentIndex ? 'fontColorBox' : 'fontColorBox1'}}">服务预约</text>
<hr class="{{0 == currentIndex ? 'lineBox' : 'notLineBox'}}" />
</view>
<view class='titleBox2' bindtap='titleClick' data-idx='1'>
<text class="{{1 == currentIndex ? 'fontColorBox' : 'fontColorBox1'}}">订单消息</text>
<hr class="{{1 == currentIndex ? 'lineBox' : 'notLineBox'}} " />
</view>
</view>
<!-- 内容布局 -->
<swiper class='swiperTtemBox' bindchange='pagechange' current='{{currentIndex}}'>
<!--服务预约 -->
<swiper-item class='swiperTtemBox' catchtouchmove='onTouchMove'>
<!-- 服务预约列表 -->
<scroll-view class="box-scroll" scroll-y='true'>
<!-- 服务列表 -->
<block wx:for="{{listItem}}" wx:key="id" wx:for-item="itemName" wx:for-index="id">
<view class="up_service">
<view class="up_service_content">
<!-- 上门服务 -->
<view class="up_service_title_txt">
<text>
{{itemName.packageName }}
</text>
</view>
<!-- 服务内容 -->
<view class="upitem_list">
<block wx:for="{{itemName.services.length}}" wx:key="ids" wx:for-item="chilgrenItem" wx:for-index="ids">
<view class="item_nursin" catchtap="nursin_servies" id="{{itemName.services[ids].serviceId}}">
<text class="up_ser_it_txt" id="up_ser_it_txt_id" catchtap="nursin_servies" id="{{itemName.services[ids].serviceId}}">{{itemName.services[ids].brandName}}</text>
</view>
</block>
</view>
</view>
</view>
</block>
</scroll-view>
</swiper-item>
<!-- 订单消息 -->
<swiper-item class='swiperTtemBox' catchtouchmove='onTouchMove'>
<view class="order_msg_md">暂无订单消息</view>
</swiper-item>
</swiper>
</view>
(4)index.wxss文件,代码如下:
Page {
background: #f0f0f0;
height: 100%;
position: fixed;
}
/* 头部搜索 */
/* 搜索标题 */
.title_search{
background: linear-gradient(to right, #0455a7, #62c8ec);
height: 170rpx;
width: 100%;
display: flex;
flex-direction: row;
align-items: flex-end;
justify-content: flex-start;
}
.seeck_md{
display: flex;
flex-direction: row;
width: 100%;
justify-content: space-between;
align-items: flex-end;
}
.ahead_md{
display: flex;
flex-direction: row;
width: 100%;
margin-bottom: 20rpx;
}
.title_icon_ss{
height: 70rpx;
width: 70rpx;
background-color: white;
border-radius: 35rpx;
margin-left: 20rpxrpx;
}
/* 搜索部分bg*/
.search_md{
background-color: #69ccf1;
margin-left: 10rpx;
height: 70rpx;
width: 390rpx;
border-radius: 35rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
}
/* 搜索 */
.seeck_ic{
height: 46rpx;
width: 46rpx;
margin-left: 20rpx;
border-radius: 23rpx;
}
/* 语音 */
.vioce_icon{
height: 46rpx;
width: 46rpx;
border-radius: 23rpx;
margin-right: 20rpx;
}
/* 消息 */
.msg{
width: 100rpx;
height: 90rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-right: 0rpx;
margin-left: 30rpx;
}
/* 消息提示 */
.msg_tag{
position: absolute;
background-color: #ff6162;
width: 14rpx;
height: 14rpx;
border-radius: 7rpx;
margin-bottom: 72rpx;
margin-left: 24rpx;
}
.msg_ic{
height: 44rpx;
width: 48rpx;
margin-right: 2rpx;
margin-right: 10rpx;
}
.msg_txt{
font-size: 24rpx;
height: 40rpx;
width: 60rpx;
margin-bottom: 20rpx;
align-items: flex-start;
color: #fff;
display: flex;
justify-content: flex-start;
}
/* 退出 */
.logout{
width: 100rpx;
height: 90rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-right: 30rpx;
}
.logout_ic{
height: 44rpx;
width: 48rpx;
margin-right: 2rpx;
}
.logout_txt{
font-size: 24rpx;
height: 40rpx;
width: 60rpx;
margin-bottom: 20rpx;
align-items: flex-start;
color: #fff;
display: flex;
justify-content: flex-start;
}
/* 搜索标题 */
/* 头部搜索 */
.box-scroll{
background-color: #EFEFEF;
width: 100%;
flex: 1 auto;
height: calc(100vh - 260rpx);
left: 0rpx;
right: 0rpx;
top: 0rpx;
padding-bottom: 0rpx;
}
/* .box-scroll {
flex: 1 auto;
height: calc(100vh - 390rpx);
left: 0rpx;
right: 0rpx;
top: 0rpx;
padding-bottom: 20rpx;
} */
/* 顶部切换 */
.navBox {
/* 顶部tab盒子样式 */
width: 100%;
height: 80rpx;
background: white;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
/* 文字默认颜色 */
.fontColorBox {
color: #07c8ae;
}
.fontColorBox1 {
color: black;
}
/* 文字默认颜色 */
.titleBox1,
.titleBox2 {
/* 未选中文字的样式 */
width: 50%;
font-size: 30rpx;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-end;
padding-top: 10rpx;
}
.lineBox,
.notLineBox {
/* 选中及未选中底线共同样式 */
width: 100%;
height: 4rpx;
margin-top: 16rpx;
border-radius: 4rpx;
}
.lineBox {
/* 选中底线样式 */
background: #06c7ae;
width: 100%;
height: 4rpx;
margin-top: 16rpx;
border-radius: 4rpx;
}
.notLineBox {
/* 未选中底线样式 */
background: transparent;
width: 100%;
height: 4rpx;
}
/* 底部内容样式 */
.swiperTtemBox {
height: 100vh;
overflow: scroll;
margin: 0rpx 0rpx;
background: #f0f0f0;
border-radius: 30rpx;
font-size: 28rpx;
margin-top: 5rpx;
}
/* 顶部切换 */
.up_service {
justify-content: left;
padding-left: 40rpx;
padding-right: 40rpx;
}
.up_service_content {
justify-content: space-between;
}
.up_service_title_txt {
color: #666666;
}
.upitem_list {
display: flex;
flex-direction: row;
justify-content: space-between;
flex-wrap: wrap;
}
.item_nursin {
width: 320rpx;
height: 200rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
flex-shrink: 0;
flex-grow: 0;
margin-top: 30rpx;
background-color: white;
border-radius: 20rpx;
}
.up_service_icon {
width: 130rpx;
height: 110rpx;
border-radius: 10rpx;
margin-top: 10rpx;
}
#up_ser_it_txt_id {
color: #1b1b1b;
font-size: 32rpx;
margin-top: 10rpx;
}
.cn_medicine {
margin-top: 30rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
}
/* 院内服务 */
.hospital_service {
justify-content: left;
padding-left: 40rpx;
padding-right: 40rpx;
margin-top: 10rpx;
}
.order_msg_md{
display: flex;
margin-top: 30rpx;
align-items: center;
justify-content: center;
color: #919199;
}
.scroll-view_H {
overflow: scroll;
white-space: nowrap;
background-color: white;
margin-right: 30rpx;
}
.head_list {
display: flex;
/* display: inline-block; */
flex-direction: row;
background-color: white;
height: 160rpx;
width: 100%;
justify-content: flex-start;
align-items: center;
}
/* 家属选择背景 */
.head_list_item_one {
flex-shrink: 0;
flex-grow: 0;
display: flex;
flex-direction: column;
background-color: #f0f0f0;
width: 140rpx;
height: 140rpx;
align-items: center;
justify-content: center;
margin-left: 30rpx;
border-radius: 10rpx;
}
/* 家属选背景 */
.head_list_item_one_ed {
display: flex;
flex-direction: column;
background-color: #06c7ae;
flex-shrink: 0;
flex-grow: 0;
width: 140rpx;
height: 140rpx;
align-items: center;
justify-content: center;
margin-left: 30rpx;
border-radius: 10rpx;
}
.head_list_item_one_im_parent {
background-color: white;
width: 80rpx;
height: 80rpx;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
}
.head_list_item_one_im {
width: 72rpx;
height: 72rpx;
border-radius: 36rpx;
background-color: white;
}
.head_list_item_one_txt {
margin-top: 6rpx;
font-size: 26rpx;
color: #252525;
}
.head_list_item_one_txt_ed {
margin-top: 6rpx;
font-size: 26rpx;
color: #ffffff;
}
.first {
margin-top: 20rpx;
}
运行结果如下:
问题总结
本文介绍了微信小程序如何实现tab切换和数据列表,有兴趣的同学可以进一步深入研究。
标签:flex,程序实现,微信,height,content,width,tab,margin,color From: https://blog.51cto.com/baorant24/6188286