Vue transition 动画组件

发布于 2024-10-02 05:05:59 字数 4179 浏览 4 评论 0

在下列情形中,可以给任何元素和组件添加进入/离开过渡:

  • 条件渲染 (使用 v-if )
  • 条件展示 (使用 v-show )
  • 动态组件
  • 组件根节点

1. 基本使用

自定义 transition 过渡效果,你需要对 transition 组件的 name 属性自定义,并在 css 中写入对应的样式。在进入/离开的过渡中,会有 6 个 class 切换

<template>
       <button @click='flag = !flag'>切换</button>
       <transition name='fade'>
         <div v-if='flag' class="box"></div>
       </transition>
</template>
<style>
//开始过渡
.fade-enter-from{
   background:red;
   width:0px;
   height:0px;
   transform:rotate(360deg)
}
//开始过渡了
.fade-enter-active{
  transition: all 2.5s linear;
}
//过渡完成
.fade-enter-to{
   background:yellow;
   width:200px;
   height:200px;
}
//离开的过渡
.fade-leave-from{
  width:200px;
  height:200px;
  transform:rotate(360deg)
}
//离开中过渡
.fade-leave-active{
  transition: all 1s linear;
}
//离开完成
.fade-leave-to{
  width:0px;
   height:0px;
}
</style>

2. 自定义过渡 class 类名与过渡时间

作用:结合第三方动画库使用

设置过渡 class 类名

一共可以设置 6 个类名:

  • enter-from-class
  • enter-active-class
  • enter-to-class
  • leave-from-class
  • leave-active-class
  • leave-to-class
<template>
        <transition
            leave-active-class="animate__animated animate__bounceInLeft"
            enter-active-class="animate__animated animate__bounceInRight"
        >
            <div v-if="flag" class="box"></div>
        </transition>
</template>

设置过渡时间

<transition :duration="1000">...</transition>
 
<!-- 分别指定进入和离开的持续时间 -->
<transition :duration="{ enter: 500, leave: 800 }">...</transition>

3. transition 生命周期钩子

动画实现过程中向外抛出的事件

可以结合 gsap 动画库使用 GreenSock

<template>
  <transition
              @before-enter="beforeEnter"  <!--对应 enter-from-->
              @enter="enter" <!-- 对应 enter-active-->
              @after-enter="afterEnter" <!-- 对应 enter-to-->
              @enter-cancelled="enterCancelled" <!-- 显示过渡打断-->
              @before-leave="beforeLeave" <!-- 对应 leave-from-->
              @leave="leave" <!-- 对应 enter-active-->
              @after-leave="afterLeave" <!-- 对应 leave-to-->
              @leave-cancelled="leaveCancelled" <!-- 离开过渡打断-->
              >
  ...
  </transition>
</template>
<script lang="ts" setup>
// import gsap from "gsap"

const beforeEnter = (el: Element) => {
    console.log('进入之前 from', el);
}
const Enter = (el: Element,done:Function) => {
    console.log('过度曲线');
    setTimeout(()=>{
       done()
    },3000)
}
const AfterEnter = (el: Element) => {
    console.log('to');
}
</script>

注意:当只用 JavaScript 过渡的时候,在 enterleave 钩子中必须使用 done 进行回调

4. appear 页面加载完立刻显示动画

通过这个属性可以设置初始节点过渡,就是页面加载完成就开始动画,对应三个状态

<template>
	<transition
              appear
              appear-active-class="from"
							appear-from-class="active"
							appear-to-class="to"
              >
  	<div v-if='flag' class="box"></div>
  </transition>
</template>
<style>
  .box {
    width: 200px;
    height: 200px;
  }
  .from {
    width: 0;
    height: 0;
  }
  .active {
    transition: all .3s ease
  }
  .to {
    width: 200px;
    height: 200px;
  }
</style>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

又怨

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文