transition内置组件 
- 作用: 在插入、更新或移除 DOM元素时,在合适的时候给元素添加样式类名。
- 在动画或过渡执行期间,vue 会给我们的元素添加 6 个类名:
- 元素进入的样式: - v-enter-from:进入的起点
- v-enter-active:进入过程中
- v-enter-to:进入的终点
 
- 元素离开的样式: - v-leave-from:离开的起点(也就是进入的终点)
- v-leave-active:离开过程中
- v-leave-to:离开的终点(也就是进入的起点)
 
- transiton内置组件的<transition>标签不会渲染到DOM树中 Preview Preview
1.transition过渡 
示例:
<template>
  <div class="">
    <a-button mb20px mr20px @click="handleRight">
      点击右滑
    </a-button>
    <a-button @click="handleLeft">
      点击左滑
    </a-button>
    <transition>
      <h1 v-show="show" class="bg-sky text-[#f00]!">
        给我一个div
      </h1>
    </transition>
  </div>
</template>
<style scoped lang='scss'>
// 进入的起点  离开的终点
.v-enter-from,
.v-leave-to{
  opacity: 0;
  // 从右边滑走   需要改成左边需改成  -100%
  transform:translateX(v-bind(val));
}
.v-enter-active,
.v-leave-active{
  transition: all .5s;
}
</style>给我一个div
注意点:
上例中已经写了进入的起点和离开的终点的状态 此时就不需要再写 进入的终点和离开的起点的状态了 也就是v-enter-to和v-leave-from vue内部会自行解析
2.transition动画 
使用动画同样可以实现上例中的效果,只借助transition提供的进入和离开的过程类名即可 v-enter-active和v-leave-active
<style scoped lang='scss'>
/* 定义动画 */
@keyframes move {
  from{
    // 开始状态
    opacity: 0;
    // -100% or 100%
    transform: translateX(v-bind(val));
  }to{
    // 结束状态
    opacity: 1;
    transform: translateX(0);
  }
}
/* 在过程类名中使用动画 */
.v-enter-active{
  animation: move .5s;
}
.v-leave-active{
  /* 离开时动画翻转 */
  animation: move .5s reverse;
}
</style>给我一个div
3.为过渡效果命名 
我们可以给 <Transition> 组件传一个 name prop 来声明一个过渡效果名:
<Transition name="fade">
  ...
</Transition>对于一个有名字的过渡效果,对它起作用的过渡 class 会以其名字而不是 v 作为前缀。比如,上方例子中被应用的 class 将会是 fade-enter-active 而不是 v-enter-active。这个“fade”过渡的 class 应该是这样:
.fade-enter-active,
.fade-leave-active {
  transition: opacity 0.5s ease;
}
.fade-enter-from,
.fade-leave-to {
  opacity: 0;
}4.过渡集成第三方动画 
transition支持使用第三方动画效果 以animate.css为例:
pnpm add animate.css// main.ts
import 'animate.css'<template>
  <div>
    <a-button mb20px mr20px @click="show = !show">
      点击过渡
    </a-button>
    <!-- 使用第三方动画 -->
    <transition
      enter-active-class="animate__animated animate__bounceInDown"
      leave-active-class="animate__animated animate__backOutUp"
    >
      <h1 v-show="show" class="bg-sky text-[#f00]!">
        给我一个div
      </h1>
    </transition>
  </div>
</template>给我一个div
说明:
- 其中 - animate__animated为animate.css的必要前缀
- enter-active-class="animate__animated animate__bounceInDown"相当于在样式中设置成- v-enter-active="{animation:'animate__bounceInDown'}" 需要使用动画库的哪个动画就使用哪个名字设置- enter-active-class和- leave-active-class
- 所有可以传入 - <transition>组件的props如下:传入的这些 class 会覆盖相应阶段的默认 class 名
- enter-from-class
- enter-active-class
- enter-to-class
- leave-from-class
- leave-active-class
- leave-to-class
5.同时使用动画和过渡 
当动画事件和过渡事件设置不一致的时候可能会产生意想不到的bug,这时候会强行执行完过渡和动画...
设置
type属性为animation或者transition代表以哪个的时间为准也可以设置
:duration='2000'属性,表示不管是动画还是过渡都在两秒内执行完,还可以写成对象形式 :
:duration='{enter:2000,leave:1000}'进入的时候2秒 退出的时候1秒
<template>
  <div>
    <a-button @click="isShow = !isShow">
      切换动画
    </a-button>
    <!-- 当动画事件和过渡事件设置不一致的时候可能会产生意想不到的bug  会强行执行完过渡和动画
      设置type属性为animation或者transition 代表以哪个的时间为准
     也可以设置:duration='2000'属性,表示不管是动画还是过渡都在两秒内执行完,还可以写成对象形式 :
     :duration='{enter:2000,leave:1000}'  进入的时候2秒 退出的时候1秒
      -->
    <!-- type="animation" -->
    <transition appear type="animation">
      <h1 v-show="isShow" class="bg-sky text-[#f00]">
        给我一个div
      </h1>
    </transition>
  </div>
</template>
<style lang="scss" scoped>
main {
  font-size: 30px;
  font-weight: 700;
}
@keyframes move {
  from {
      transform: translateX(-100%);
  }
  to {
      transform: translateX(0%);
  }
}
//动画时间和过渡时间设置不一致 , 会强行执行过渡和动画
.v-enter-active {
  animation: move 1s linear;
  transition: 3s linear;
}
.v-leave-active {
  animation: move 1s linear reverse;
  transition: 3s linear;
}
.v-enter-from,
.v-leave-to {
  opacity: 0;
}
</style>