当前位置: 首页 > news >正文

uniapp vue3 梯形选项卡组件

实现的效果图:

切换选项卡显示不同的内容,把这个选项卡做成了一个组件,需要的自取。

// 组件名为 trapezoidalTab
<template>  <view class="pd24"><view class="nav"><!-- 左侧 --><view class="item" :class="{ active: activeIndex === 0 }" @click="changeTab(0)"> <view :class=" activeIndex === 0 ? 'activeTxt black' : 'itemTxt' ">{{leftLabel}}</view></view><!-- 右侧 --><view class="item" :class="{ active: activeIndex === 1 }"  @click="changeTab(1)"> <view :class="activeIndex == 1 ? 'activeTxt black' : 'itemTxt' ">{{rightLabel}}</view></view></view> <view class="content"><view v-if='activeIndex === 0'><slot name="left"></slot></view><view v-if='activeIndex === 1'><slot name="right"></slot></view></view></view> 
</template>  <script setup> import {ref,defineProps,defineEmits,} from 'vue'const props = defineProps({leftLabel: {type: String,default: '到店取'},rightLabel: {type: String,default: '直达送'},activeIndex: {type: Number,default: 0},})const emit = defineEmits(['changeTab'])const changeTab=(val)=> {emit('changeTab',val) }  
</script>  <style lang="scss" scoped>.nav{display: flex;align-items: flex-end;}.nav .item{flex: 1;height: 80rpx;background: #E6E6E6;border-radius: 10rpx 10rpx 0 0;position: relative;list-style: none;}.nav .item.active{height: 96rpx;background: #FFF;}.nav .item:first-child:before,  .nav .item:last-child:before {  content: '';  display: none;  width: 20rpx;  height: 100%;  background: #FFF;  position: absolute;  top: 0;  z-index: 10;  }  .nav .item:first-child:before {  right: -10rpx;  border-radius: 0 10rpx 0 0;  transform: skew(10deg);  }  .nav .item:last-child:before {  left: -10rpx;  border-radius: 10rpx 0 0 0;  transform: skew(-10deg);  }  .nav .item.active:first-child:before,  .nav .item.active:last-child:before {  display: block;  }.itemTxt{height: 80rpx;text-align: center;line-height: 80rpx;font-weight: 500;font-size: 28rpx;color: rgba(0,0,0,0.4);}.activeTxt{text-align: center;height: 96rpx;line-height: 96rpx;font-weight: bold;font-size: 32rpx;}.content{width: 100%;background: #fff;}
</style>

使用组件:

<trapezoidal-tab @changeTab="changeTab" :activeIndex='activeIndex'><template v-slot:left><view>左边部分内容</view></template><template v-slot:right><view>右边部分内容</view></template>
</trapezoidal-tab>const activeIndex = ref(0) //tab选项卡 0:到店取 1:直达送
// 切换tab选项卡
const changeTab =(val)=>{activeIndex.value = val
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot Admin调整类的日志级别
  • 2.计算机网络基础
  • 简单了解Maven与安装
  • 加密与安全_优雅存储二要素(AES-256-GCM )
  • 【redis】常用数据类型及命令
  • mongoDB-1
  • JavaEE: 深入探索TCP网络编程的奇妙世界(一)
  • 半导体制造技术中的沉积和驱入(Deposition and drive-in)过程
  • C语言字符串学习
  • linux 双网卡服务器突然断电后网卡单通故障解决
  • 力扣(LeetCode)每日一题 2848. 与车相交的点
  • 前端框架对比和选择
  • 优数:助力更高效的边缘计算
  • VirtualBox Install MacOS
  • 栈的各种接口的实现(C)
  • [deviceone开发]-do_Webview的基本示例
  • Android交互
  • Codepen 每日精选(2018-3-25)
  • conda常用的命令
  • express + mock 让前后台并行开发
  • express如何解决request entity too large问题
  • HTTP那些事
  • JavaScript学习总结——原型
  • JAVA并发编程--1.基础概念
  • Nodejs和JavaWeb协助开发
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 分类模型——Logistics Regression
  • 关于springcloud Gateway中的限流
  • 前端
  • 使用权重正则化较少模型过拟合
  • 整理一些计算机基础知识!
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​Spring Boot 分片上传文件
  • ​卜东波研究员:高观点下的少儿计算思维
  • #Ubuntu(修改root信息)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #职场发展#其他
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (NSDate) 时间 (time )比较
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (二)c52学习之旅-简单了解单片机
  • (接口自动化)Python3操作MySQL数据库
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • ../depcomp: line 571: exec: g++: not found
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net7 环境安装配置
  • .net经典笔试题
  • .net连接oracle数据库
  • //解决validator验证插件多个name相同只验证第一的问题