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

Vue3实现带动画效果的tab栏切换

效果图如下所示:

实现思路:

其实很简单

1、首先切换tab栏时tab标签激活下标与对应显示内容下标要一致。

2、其次点击tab栏切换时更新下标

3、最后就是css添加动画效果

这样就了!!!

上全部代码

<template><div class="container"><el-card><el-button type="text">1、tab栏切换(针对格式相同的内容)<i class="el-icon-s-order" /></el-button><div class="tab-nav"><ul class="tab-tilte"><li v-for="(item, index) in tabs" :key="index" :class="{active:tabIndex==index}" @click="changeTab(index)">{{ item }}</li></ul></div><div class="tab-content" :style="{ transform: `translateX(${-tabIndex * 100}%)` }"><div v-for="(item, index) in contents" :key="index" class="tab-item">{{ item.name }}</div></div></el-card></div>
</template><script setup>
import { ref } from 'vue';const tabIndex = ref(0);const tabs = ['tab栏1', 'tab栏2', 'tab栏3', 'tab栏4'];const contents=[{id:'1',name:'内容1',pic:'',title:'tab栏一区域'},{id:'2',name:'内容2',pic:'',title:'tab栏二区域'},{id:'3',name:'内容3',pic:'',title:'tab栏三区域'},{id:'4',name:'内容4',pic:'',title:'tab栏四区域'}];const changeTab = (index) => {tabIndex.value = index;};</script><style lang="scss" scoped>
.container {width: 96%;margin: 2%;
}
.tab-nav ul{//ul默认有40左边距padding-left: 0px !important;
}
ul li {margin: 0;padding: 0;list-style: none;
}.tab-tilte {display: flex;
}.tab-tilte li {flex: 1;padding: 10px;text-align: center;background-color: #f4f4f4;cursor: pointer;transition: background-color 0.3s; /* 添加过渡效果 */
}/* 点击对应的标题添加对应的背景颜色 */
.tab-tilte .active {background-color: #09f;color: #fff;
}.tab-content {display: flex;transition: transform 0.5s ease; /* 添加过渡效果,并使用缓动函数 */
}.tab-item {flex: 1;min-width: 96%;margin: 2%;line-height: 100px;text-align: left;background: rgb(0, 255, 200);
}
</style>

相关文章:

  • Elasticsearch:创建自定义 ES Rally tracks 的分步指南
  • C++结合Lambda表达式在函数内部实现递归
  • MapboxGL JS⽀持哪些地图样式和交互控件?
  • 「数据结构」哈希表2:实现哈希表
  • MySQL高级特性篇(7)-数据库版本控制与迁移
  • SpringSecurity安全框架
  • yolov5-tracking-xxxsort yolov5融合六种跟踪算法(一)--环境配置GPU版本
  • Unity摄像机跟随
  • LocalSend跨设备传输文件传输协议 v2
  • NoSQL 数据库管理工具,搭载强大支持:Redis、Memcached、SSDB、LevelDB、RocksDB,为您的数据存储提供无与伦比的灵活性与性能!
  • 车载软件架构Adaptive AUTOSAR —— 身份和访问管理和加密技术
  • C语言奇技Y巧之sscanf函数用法详解
  • 设计模式----工厂模式
  • HAL/LL/STD STM32 U8g2库 +I2C SSD1306/sh1106 WouoUI磁贴案例
  • k8s 基础理论
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CentOS从零开始部署Nodejs项目
  • css系列之关于字体的事
  • E-HPC支持多队列管理和自动伸缩
  • Hibernate最全面试题
  • iOS 系统授权开发
  • Javascript编码规范
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Otto开发初探——微服务依赖管理新利器
  • Python socket服务器端、客户端传送信息
  • Redis 懒删除(lazy free)简史
  • vue脚手架vue-cli
  • 解析 Webpack中import、require、按需加载的执行过程
  • 如何解决微信端直接跳WAP端
  • 应用生命周期终极 DevOps 工具包
  • 优化 Vue 项目编译文件大小
  • ​学习一下,什么是预包装食品?​
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (BFS)hdoj2377-Bus Pass
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (LeetCode) T14. Longest Common Prefix
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)平衡树
  • .Net core 6.0 升8.0
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @Bean有哪些属性
  • @JoinTable会自动删除关联表的数据
  • @Resource和@Autowired的区别
  • @在php中起什么作用?
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [100天算法】-不同路径 III(day 73)
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [CSS] - 修正IE6不支持position:fixed的bug
  • [fsevents@^2.1.2] optional install error: Package require os(darwin) not compatible with your platfo
  • [github配置] 远程访问仓库以及问题解决