vue中使用transition动画

一、淡入淡出动画效果

在这里插入图片描述

二、代码实现

注意事项:要保证key的唯一性

<template>
  <div class="beenDone">
    <transition name="slide-fade">
      <div
        :class="sumShow === true ? `box_echart` : `box_tree`"
        :key="keyNum"
      ></div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      sumShow: true,
      keyNum: 1,
    };
  },
  mounted() {
    setInterval(() => {
      this.sumShow = !this.sumShow;
      this.keyNum = Date.parse(new Date())
    }, 3000);
  },
};
</script>

<style lang="less" scoped>
.beenDone {
  border: 1px solid #ccc;
  border-radius: 5px;
  width: 440px;
  height: 400px;
  overflow: hidden;
  .box_echart {
    background: url("../images/box_echart.svg") no-repeat;
    background-size: 100% 100%;
    width: 440px;
    height: 400px;
  }

  .box_tree {
    background: url("../images/box_tree.svg") no-repeat;
    background-size: 100% 100%;
    width: 440px;
    height: 400px;
  }
    .slide-fade-enter-active {
    transition: all 0.5s cubic-bezier(1, 0.5, 0.8, 1);
  }
  .slide-fade-leave-active {
    transition: all 0.5s cubic-bezier(1, 0.5, 0.8, 1);
  }
  .slide-fade-enter,
  .slide-fade-leave-to {
    opacity: 0;
  }
 
}
</style>

三、上下切换动画效果

在这里插入图片描述

四、代码,只需要将上面的css里面重复样式替换如下

 .slide-fade-enter-active {
    transition: all 0.5s ease;
  }
  .slide-fade-leave-active {
    transition: all 0.5s ease;
  }
  .slide-fade-enter,
  .slide-fade-leave-to {
    transform: translateY(10%);
    opacity: 0;
  }

五、如果有左右切换,只需要改变 translateX即可

<think>好的,用户想了解如何在Vue3中使用transition组件,特别是使用方法示例。首先,我需要整理Vue3中transition的基本用法,确保涵盖关键点。 根据引用资料,Vue Transition组件用于处理进入和离开的动画。用户可能需要知道如何包裹元素,使用CSS类名,以及不同的模式。比如,引用[3]提到了mode属性控制动画顺序,如out-in模式。另外,引用[4]提到自定义类名和生命周期钩子,这些也是重要内容。 首先,我应该从基本示例开始,展示简单的淡入淡出效果,说明v-if或v-show的使用。然后,解释自动添加的CSS类名,如v-enter-active等,并给出对应的CSS代码示例。接下来,介绍mode属性的使用,比如out-in模式,防止进入和离开同时发生。 还要提到自定义过渡类名,这样用户可以使用第三方动画库如Animate.css,引用[2]提到动画提升用户体验,所以结合第三方库的例子会很好。比如,使用enter-active-class属性指定自定义类。 此外,生命周期钩子也是高级用法的一部分,如@before-enter事件,结合GSAP实现复杂动画,引用[4]中的例子可以说明这一点。最后,transition-group组件用于列表过渡,比如对v-for渲染的元素添加动画,可能需要一个列表的示例。 需要注意用户可能需要实际代码示例,所以每个部分都应包含代码块,并确保语法正确。同时,避免使用用户不可见的格式,保持回答结构清晰。最后,生成相关问题时要围绕transition组件的进阶使用和优化,比如性能优化、模式选择、第三方库集成等。</think>### Vue3 Transition组件使用方法详解 在Vue3中使用Transition组件实现动画效果,主要通过以下5个步骤实现: --- #### 一、基础过渡效果 通过包裹需要动画的元素/组件,配合`v-if`/`v-show`控制显隐: ```vue <template> <button @click="show = !show">切换</button> <Transition> <div v-if="show" class="box">Hello Vue3 Transition</div> </Transition> </template> <script setup> import { ref } from 'vue' const show = ref(true) </script> <style> /* 定义过渡类 */ .v-enter-active, .v-leave-active { transition: opacity 0.5s ease; } .v-enter-from, .v-leave-to { opacity: 0; } </style> ``` 此时元素会呈现淡入淡出效果,原理是Vue自动为过渡添加了CSS类名[^2] --- #### 二、关键属性说明 1. **动画模式控制** ```vue <Transition mode="out-in"> <component :is="currentView"/> </Transition> ``` 通过`mode`属性控制动画顺序: - `in-out`:新元素先进入,旧元素后离开 - `out-in`(推荐):旧元素先离开,新元素再进入[^3] 2. **自定义类名** ```vue <Transition enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__fadeOut" > <div v-if="show">使用Animate.css库的动画</div> </Transition> ``` 适用于集成第三方动画库时自定义类名[^4] --- #### 三、进阶动画控制 1. **生命周期钩子** ```vue <Transition @before-enter="onBeforeEnter" @enter="onEnter" @after-enter="onAfterEnter" > <div v-if="show"></div> </Transition> <script setup> import gsap from 'gsap' const onEnter = (el, done) => { gsap.from(el, { duration: 1, x: 200, onComplete: done }) } </script> ``` 可通过JavaScript钩子实现复杂动画逻辑 2. **列表过渡** ```vue <TransitionGroup name="list" tag="ul"> <li v-for="item in items" :key="item.id"> {{ item.text }} </li> </TransitionGroup> <style> .list-move { transition: transform 0.8s ease; } </style> ``` `<TransitionGroup>`专为列表设计,支持元素位置变化的动画 --- #### 四、性能优化建议 1. 为`<Transition>`设置`appear`属性实现初始渲染动画 2. 使用`css: false`禁用自动CSS探测时,需手动调用done回调 3. 复杂动画建议使用`requestAnimationFrame`或GSAP库[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值