当前位置:首页 > VUE

vue 实现tab过度动画

2026-01-21 10:21:46VUE

Vue 实现 Tab 过渡动画

在 Vue 中实现 Tab 过渡动画可以通过 <transition><transition-group> 组件结合 CSS 过渡或动画实现。以下是具体实现方法:

使用 <transition> 组件

通过 Vue 内置的 <transition> 组件包裹 Tab 内容,配合 CSS 过渡类名实现动画效果。

<template>
  <div>
    <div class="tabs">
      <button 
        v-for="(tab, index) in tabs" 
        :key="index" 
        @click="currentTab = index"
        :class="{ active: currentTab === index }"
      >
        {{ tab.name }}
      </button>
    </div>

    <transition name="fade" mode="out-in">
      <div :key="currentTab">
        {{ tabs[currentTab].content }}
      </div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 0,
      tabs: [
        { name: 'Tab 1', content: 'Content for Tab 1' },
        { name: 'Tab 2', content: 'Content for Tab 2' },
        { name: 'Tab 3', content: 'Content for Tab 3' }
      ]
    };
  }
};
</script>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}

.tabs button.active {
  background-color: #42b983;
  color: white;
}
</style>

使用动态组件

通过动态组件 <component> 结合 <transition> 实现更灵活的 Tab 切换动画。

<template>
  <div>
    <div class="tabs">
      <button 
        v-for="(tab, index) in tabs" 
        :key="index" 
        @click="currentTab = tab.component"
        :class="{ active: currentTab === tab.component }"
      >
        {{ tab.name }}
      </button>
    </div>

    <transition name="slide" mode="out-in">
      <component :is="currentTab" />
    </transition>
  </div>
</template>

<script>
import Tab1 from './Tab1.vue';
import Tab2 from './Tab2.vue';
import Tab3 from './Tab3.vue';

export default {
  components: { Tab1, Tab2, Tab3 },
  data() {
    return {
      currentTab: 'Tab1',
      tabs: [
        { name: 'Tab 1', component: 'Tab1' },
        { name: 'Tab 2', component: 'Tab2' },
        { name: 'Tab 3', component: 'Tab3' }
      ]
    };
  }
};
</script>

<style>
.slide-enter-active, .slide-leave-active {
  transition: transform 0.5s;
}
.slide-enter {
  transform: translateX(100%);
}
.slide-leave-to {
  transform: translateX(-100%);
}
</style>

使用 CSS 动画

除了过渡效果,还可以使用 CSS 动画实现更复杂的 Tab 切换效果。

.bounce-enter-active {
  animation: bounce-in 0.5s;
}
.bounce-leave-active {
  animation: bounce-in 0.5s reverse;
}
@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.2);
  }
  100% {
    transform: scale(1);
  }
}

结合路由实现 Tab 动画

如果 Tab 切换与路由关联,可以在路由视图 <router-view> 上应用过渡动画。

<template>
  <div>
    <router-link 
      v-for="(tab, index) in tabs" 
      :key="index" 
      :to="tab.path"
      active-class="active"
    >
      {{ tab.name }}
    </router-link>

    <transition name="fade" mode="out-in">
      <router-view />
    </transition>
  </div>
</template>

注意事项

  • mode="out-in" 确保当前元素离开动画完成后新元素再进入。
  • 为动态内容添加 :key 强制 Vue 重新渲染以触发动画。
  • 避免同时使用 v-ifv-show 控制 Tab 内容,优先使用 v-if 确保动画触发。

以上方法可根据实际需求组合或调整,实现多样化的 Tab 切换动画效果。

vue 实现tab过度动画

标签: 动画vue
分享给朋友:

相关文章

vue实现分页

vue实现分页

Vue实现分页的方法 使用Element UI的分页组件 Element UI提供了现成的分页组件el-pagination,可以快速实现分页功能。 <template> <…

vue实现图片搜索

vue实现图片搜索

Vue实现图片搜索功能 使用HTML5的File API获取图片 通过<input type="file">元素让用户选择图片文件,使用FileReader对象读取图片数据。 <t…

vue实现本地数据存储

vue实现本地数据存储

使用 localStorage 或 sessionStorage Vue 中可以直接调用浏览器提供的 localStorage 或 sessionStorage API 进行数据存储。localSto…

vue实现活动倒计时

vue实现活动倒计时

实现活动倒计时的基本思路 在Vue中实现活动倒计时通常需要获取当前时间与活动结束时间的差值,并将其转换为天、小时、分钟、秒的格式展示。通过定时器每秒更新显示的时间。 定义倒计时数据 在Vue组件的…

vue实现一个tab栏

vue实现一个tab栏

Vue 实现 Tab 栏 基础实现(选项式 API) <template> <div class="tab-container"> <div class="t…

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…