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

11 篇文章 0 订阅
本文详细描述了如何在Vue项目中使用模板和JavaScript实现Tab栏切换功能,包括切换时下标同步、点击事件处理以及CSS添加动画效果,展示了相关的HTML、Vue脚本和SCSS样式代码。
摘要由CSDN通过智能技术生成

效果图如下所示:

实现思路:

其实很简单

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>

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的Tab切换并添加动画效果实现: HTML代码: ``` <div class="tab-container"> <div class="tab-header"> <div class="tab-header-item active" data-tab="tab1">Tab 1</div> <div class="tab-header-item" data-tab="tab2">Tab 2</div> <div class="tab-header-item" data-tab="tab3">Tab 3</div> </div> <div class="tab-content"> <div class="tab-pane active" id="tab1">Tab 1 Content</div> <div class="tab-pane" id="tab2">Tab 2 Content</div> <div class="tab-pane" id="tab3">Tab 3 Content</div> </div> </div> ``` CSS代码: ``` .tab-container { border: 1px solid #ccc; overflow: hidden; } .tab-header { display: flex; justify-content: space-between; background-color: #eee; } .tab-header-item { padding: 10px; cursor: pointer; transition: background-color 0.3s; } .tab-header-item.active { background-color: #fff; } .tab-content { padding: 10px; } .tab-pane { display: none; } .tab-pane.active { display: block; animation: fade-in 0.3s; } @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } ``` JavaScript代码: ``` const tabHeaderItems = document.querySelectorAll('.tab-header-item'); const tabPanes = document.querySelectorAll('.tab-pane'); tabHeaderItems.forEach(tabHeaderItem => { tabHeaderItem.addEventListener('click', () => { // 切换Tab样式 tabHeaderItems.forEach(item => { item.classList.remove('active'); }); tabHeaderItem.classList.add('active'); // 切换Tab内容 const tab = tabHeaderItem.dataset.tab; tabPanes.forEach(tabPane => { if (tabPane.id === tab) { tabPane.classList.add('active'); } else { tabPane.classList.remove('active'); } }); }); }); ``` 在这个实现中,我们首先定义了一个包含TabTab内容的容器,并为它们添加了对应的类名。然后我们使用flex布局定义了Tab的样式,并使用JavaScript实现Tab的点击事件,当点击某个Tab时,会切换对应的Tab内容,并为当前的Tab添加active类名来改变样式。 为了添加动画效果,我们在CSS中定义了一个fade-in的动画,当Tab内容切换时,如果是当前的Tab内容,则为它添加active类名,并应用fade-in动画实现了渐变显示效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱池鱼的酱酱仔

您的鼓励是我前进的动力哦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值