uniapp 简易滑块切换,简单易改

<template>
	<view class="my-tab w-100 flex-center">
		<view class="tab-without">
			<view class="switch-tab w-100" :style="{height:height,borderRadius:borderRadius,border:borderBox,width:width,backgroundColor:mainBg}">
				<block v-for="(item,index) in tabList" :key="index">
					<view class="h-100 one flex-center font-weight-550" @click="tabClick(index)">{
  {item}}
					</view>
				</block>
			</view>
			<view class="zg-view flex-center"
				:style="{left:tabLeft,borderRadius:radius,backgroundColor:bgColor,color:textColor,height:height,width:themeWidth}">
				{
  {tabList[tabIndex]}}
			</view>
		</view>
	</view>
</template>
<script>
	export default {
		props: {
			/* 主体的所需数据的宽度*/
			width: {
				type: String,
				default: "572rpx"
			},
			/* 主体的所需数据的高度*/
			height: {
				type: String,
				default: "52rpx"
			},
			/* 主体的所需数据的圆角*/
			borderRadius: {
				type: String,
				default: "26rpx"
			},
			/* 主体的所需数据的边框*/
			borderBox: {
				type: String,
				default: '2rpx solid #333333'
			},
			/* 主体的所需数据的背景颜色*/
			mainBg: {
				type: String,
				default: '#fff'
			},
			/* 切换的数据 */
			tabList: {
				type: Array,
				default: () => {
					return ['本月数据', '季度数据', '半年数据', '本年数据']
				}
			},
			/* 滑块的背景色 */
			bgColor: {
				type: String,
				default: "#333"
			},
			/* 滑块的文字颜色*/
			textColor: {
				type: String,
				default: "#fff"
			},
			
			
		},
		computed: {
			/* 计算滑块的宽度占比 */
			themeWidth() {
				return 100 / this.tabList.length + '%'
			},
			/* 滑块移动的距离 */
			tabLeft() {
				return (100 / this.tabList.length) * this.tabIndex + '%'
			},
			/* 滑块的圆角 */
			radius() {
				let text = ''
				if (this.tabIndex == 0 && this.borderRadius != '') {
					text = `${this.borderRadius} 0 0 ${this.borderRadius}`
				}
				if (this.tabList.length - 1 == this.tabIndex && this.borderRadius != '') {
					text = `0 ${this.borderRadius}  ${this.borderRadius} 0`
				}
				return text
			}
		},
		data() {
			return {
				tabIndex: 0
			}
		},
		methods: {
			/* 切换方法,同时向外暴露当前点击的按钮 */
			tabClick(index) {
				this.tabIndex = index
				this.$emit('tabClick', index)
			}
		},
	}
</script>
<style lang="scss" scoped>
	.flex-center {
		display: flex;
		align-items: center;
		justify-content: center;
	}

	.h-100 {
		height: 100%;
	}

	.one {
		flex: 1;
	}

	.w-100 {
		width: 100%;
	}

	/* 字体权重 */
	.font-weight-500 {
		font-weight: 500;
	}

	.font-weight-550 {
		font-weight: 550;
	}

	.font-weight-600 {
		font-weight: 600;
	}

	.font-weight-700 {
		font-weight: 700;
	}

	.font-weight-bold {
		font-weight: bold;
	}

	.my-tab {
		font-size: 24rpx;

		.tab-without {
			position: relative;

			.switch-tab {
				display: flex;
				align-items: center;
				justify-content: space-between;
			}

			.zg-view {
				position: absolute;
				top: 0;
				left: 0;
				transition: all .3s;
			}
		}

	}
</style>

相关推荐

  1. 7-字串简写:前缀和+思想的学习

    2024-01-18 15:30:01       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-18 15:30:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-18 15:30:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-18 15:30:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-18 15:30:01       18 阅读

热门阅读

  1. SQL语句详解四-DQL(数据查询语言-多表查询二)

    2024-01-18 15:30:01       37 阅读
  2. SSH远程登录详解

    2024-01-18 15:30:01       29 阅读
  3. k8s和knative的区别与联系

    2024-01-18 15:30:01       33 阅读
  4. 什么是PHP中的事务隔离级别?

    2024-01-18 15:30:01       33 阅读
  5. 后端开发笔记20240117

    2024-01-18 15:30:01       35 阅读
  6. SQL之删除索引

    2024-01-18 15:30:01       27 阅读
  7. 解析Nginx配置文件conf中的常用块

    2024-01-18 15:30:01       32 阅读