uniapp制作简单的tab切换

tab切换是APP开发最常见的功能之一,uniapp中提供了多种形式的tab组件供我们使用。对于简单的页面而言,使用tabbar组件非常方便快捷,可以快速实现底部导航栏的效果。对于比较复杂的页面,我们可以使用tab组件自由定义样式和内容

目录

一、实现思路

二、实现步骤

①view部分展示

[②JavaScript 内容](#②JavaScript 内容)

③css中样式展示

三、效果展示

四、简单案例

[① div中添加](#① div中添加)

②JavaScript内容

③css样式展示

④效果展示



Uniapp作为一款跨平台的开发工具,提供了一种简便的制作tabbar滑动切换的方法。本文将介绍UniAPP如何实现tabbar滑动切换,并带有详细的示例代码。

一、实现思路

在tabbar的页面中,当用户进行左右滑动时,能够自动切换到相应的页面。这个过程可以通过Uniapp中的swiper组件实现也可以通过自定义完成,代码非常简单。这里我使用的是原生态开发。

如果想要使用组件开发,可以参考Tabs 标签 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架

二、实现步骤
①view部分展示
  1. 首先,在项目中找到tabbar的页面,在template中添加以下代码
  2. template v-for可以不用写在template模板
html 复制代码
		<view class="welltab">
				<!-- tab选项 -->
				<view class="flex-around" style="border-bottom: 1px solid #E6E6E8;">
					<view v-for="(item, index) in topList" :key="index"
						:class="[item.default ? 'screen-item-avtive' : 'screen-item']" @click="changeTabs(item)">{{ item.name
						}}</view>
				</view>
				<!-- 列表 -->
				<view v-for="(item, index) in list" class="flex-between acctab" :key="index">
					<view class="flex-colomn">
						<view style="color: #333; font-size: 28rpx;font-weight: bold;">{{ item.content }}</view>
						<view style="color: #888;font-size: 24rpx; margin-top: 10rpx;">{{ item.time }}</view>
					</view>
					<view class="">
						<view v-if="status == 0">
							<text style="font-size: 30rpx; font-weight: bold;">{{ $tools.getUnit(item.price) }}</text>
						</view>
						<view v-if="status == 1">
							<text style="font-size: 30rpx; font-weight: bold;">+{{ $tools.getUnit(item.price) }}</text>
						</view>
						<view v-if="status == 2">
							<text style="font-size: 30rpx; font-weight: bold;">-{{ $tools.getUnit(item.price) }}</text>
						</view>
					</view>
				</view>
			</view>
②JavaScript 内容

1.toplist表示的是tab顶部的内容

2.list中展示的是跳转后的内容

javascript 复制代码
<script>
	export default {
		data() {
			return {
				
				status: '', // 状态
				list: [{
					id: 1,
					price: 123,
					content: '需求任务',
					time: '2024-09-09 19:00'
				}, {
				id: 1,
				price: 300,
				content: '跑腿订单',
				time: '2024-09-09 19:00'

			}
],
                
            //展示tab款的内容
               topList: [{
				name: '全部',
				default: true,
				// default: false,
				id: 0
			}, {
				name: '收入',
				default: false,
				// default: true,
				id: 1
			}, {
				name: '支出',
				default: false,
				// default: true,
				id: 2
			},]
			}
		},
		methods: {
			//点击tab跳转
			changeTabs(item) {
				let obj = this.topList.find(v => v.default)
				if (obj) {
					obj.default = false
					item.default = true
				}
				this.status = item.id
				// 	this.getRequestList()
			},
		}
	}
</script>
③css中样式展示
  1. tab顶部文字的样式,文字点击时的样式
javascript 复制代码
<style>
	/* 点击文字的颜色 */
	.screen-item-avtive {
		position: relative;
		font-size: 28rpx;
		font-family: PingFang SC, PingFang SC;
		font-weight: bold;
		color: #428AF6;
		letter-spacing: 2rpx;
		padding: 24rpx 0;
	}
	/* 本来展示的颜色 */
	.screen-item {
		font-size: 28rpx;
		font-family: PingFang SC, PingFang SC;
		color: #333;
		letter-spacing: 2rpx;
		padding: 24rpx 0;
	}
	/* 点击的底部线条颜色 */
	.screen-item-avtive::after {
		content: '';
		position: absolute;
		left: 50%;
		bottom: 0;
		height: 4rpx;
		background-color: #428AF6;
		width: 50%;
		transform: translateX(-50%);
		border-radius: 4rpx;
		
		// transition: all .5s linear;
		animation: change 1s linear;
	}
	/* 底部变化 */
	@keyframes change {
		0% {
			width: 50%;
		}
	
		50% {
			width: 100%;
		}
	
		100% {
			width: 50%;
		}
	}
</style>
三、效果展示

四、简单案例

将各个部分的代码添加至页面中,即可展示效果。

① div中添加
html 复制代码
		<view style="background-color: #fff; padding: 24rpx;">
					<view class="flex-grid" style="border-bottom: 1px solid #E6E6E8;">
						<view v-for="(item, index) in topList" :key="index"
							:class="[item.default ? 'screen-item-avtive' : 'screen-item']" @click="changeTabs(item)">
							{{ item.name}}
						</view>
					</view>
					<view v-if="status == 0">
					        11
					<view v-if="status == 1">
						    22
					</view>
				</view>
②JavaScript内容
javascript 复制代码
<script>
	export default {
		data() {
			return {
				//展示tab款的内容
				topList: [{
					name: '待处理',
					default: true,
					// default: false,
					id: 0
				}, {
					name: '已处理',
					default: false,
					// default: true,
					id: 1
				}]
			}
		},
		methods: {
			//点击tab跳转
			changeTabs(item) {
				let obj = this.topList.find(v => v.default)
				if (obj) {
					obj.default = false
					item.default = true
				}
				this.status = item.id
				// 	this.getRequestList()
			},

		}
	}
</script>
③css样式展示
css 复制代码
	/* 点击文字的颜色 */
	.screen-item-avtive {
		position: relative;
		font-size: 28rpx;
		font-family: PingFang SC, PingFang SC;
		font-weight: bold;
		color: #1A1A1A;
		letter-spacing: 2rpx;
		padding: 24rpx 0;
	}

	/* 本来展示的颜色 */
	.screen-item {
		font-size: 28rpx;
		font-family: PingFang SC, PingFang SC;
		color: #333;
		letter-spacing: 2rpx;
		padding: 24rpx 0;
	}

	/* 点击的底部线条颜色 */
	.screen-item-avtive::after {
		content: '';
		position: absolute;
		left: 25%;
		bottom: 0;
		height: 4rpx;
		background-color: #1A1A1A;
		width: 25%;
		transform: translateX(-50%);
		border-radius: 4rpx;

		// transition: all .5s linear;
		animation: change 1s linear;
	}

	/* 底部变化 */
	@keyframes change {
		0% {
			width: 50%;
		}

		50% {
			width: 100%;
		}

		100% {
			width: 50%;
		}
	}
④效果展示
相关推荐
Redstone Monstrosity5 分钟前
字节二面
前端·面试
东方翱翔12 分钟前
CSS的三种基本选择器
前端·css
Fan_web35 分钟前
JavaScript高级——闭包应用-自定义js模块
开发语言·前端·javascript·css·html
yanglamei196243 分钟前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
千穹凌帝44 分钟前
SpinalHDL之结构(二)
开发语言·前端·fpga开发
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
叫我:松哥1 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
Hellc0071 小时前
MacOS升级ruby版本
前端·macos·ruby
前端西瓜哥1 小时前
贝塞尔曲线算法:求贝塞尔曲线和直线的交点
前端·算法
又写了一天BUG1 小时前
npm install安装缓慢及npm更换源
前端·npm·node.js