Transition

Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡:

条件渲染 (使用 v-if)

条件展示 (使用 v-show)

动态组件

组件根节点

自定义 transition 过度效果,你需要对transition组件的name属性自定义。并在css中写入对应的样式

1.过渡的类名

在进入/离开的过渡中,会有 6 个 class 切换。

过渡 class

在进入/离开的过渡中,会有 6 个 class 切换。

v-enter-from:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。

v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。

v-enter-to:定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter-from 被移除),在过渡/动画完成之后移除。

v-leave-from:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。

v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。

v-leave-to:离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave-from 被移除),在过渡/动画完成之后移除。

基本使用

<template>
<div>
<button @click="toggle">切换</button>
<Transition name="fade">
<keep-alive :include="['Login']" :exclude="['']" :max="5">
<Login v-if="flag"></Login>
<Register v-else></Register>
</keep-alive>
</Transition>
</div>
</template> <script setup lang="ts">
import Login from './components/Login.vue';
import Register from './components/register.vue';
import { ref } from 'vue'
const flag = ref(false)
const toggle = () => {
flag.value = !flag.value
}
</script> <style scoped>
/* 进入开始时刻 */
.fade-enter-from {
width: 0;
height: 0;
transform: rotate(360deg);
}
/* 过度中 */
.fade-enter-active {
transition: all 1s ease;
}
/* 进入完成 */
.fade-enter-to {
width: 300px;
height: 300px;
}
.fade-leave-from{
width: 300px;
height: 300px;
transform: rotate(360deg);
} .fade-leave-active{
transition: all 3s ease;
} .fade-leave-to{
width: 0;
height: 0;
} .fade-enter-from {}
</style>

自定义过渡类名

<template>
<div>
<button @click="toggle">切换</button>
<Transition name="fade" fade-enter-from="fade-in">
<!-- 自定义过渡类名 -->
<keep-alive :include="['Login']" :exclude="['']" :max="5">
<Login v-if="flag"></Login>
<Register v-else></Register>
</keep-alive>
</Transition>
</div>
</template> <style scoped>
.fade-in {
/* 自定义类名 */
width: 0;
height: 0;
transform: rotate(360deg);
}
</style>

区别就是 可以结合一些第三方的类库去使用

比如:

自定义过度类名 结合 Animate.css动画库

Animate.css | A cross-browser library of CSS animations.

使用方式参考官方说明文档

    <Transition enter-active-class="animate__animated animate__rotateIn">
<!-- 自定义过渡类名 -->
<keep-alive :include="['Login']" :exclude="['']" :max="5">
<Login v-if="flag"></Login>
<Register v-else></Register>
</keep-alive>
</Transition>

duration自定义过渡时间

自定义过度时间 单位毫秒

你也可以分别指定进入和离开的持续时间:

<transition :duration="1000">...</transition>

<transition :duration="{ enter: 500, leave: 800 }">...</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"//离开过度打断

<template>
<div>
<button @click="toggle">切换</button>
<Transition
:duration="{ enter: 1000, leave: 0 }"
enter-active-class="animate__animated animate__rotateIn"
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
@enter-cancelled="enterCancelled"
@before-leave="beforeLeave"
@leave="leave"
@after-leave="afterLeave"
@leave-cancelled="leaveCancelled"
>
<!-- 自定义过渡类名 -->
<keep-alive :include="['Login']" :exclude="['']" :max="5">
<Login v-if="flag"></Login>
</keep-alive>
</Transition>
</div>
</template> <script setup lang="ts">
import 'animate.css'
import Login from './components/Login.vue'
import Register from './components/register.vue'
import { ref } from 'vue'
const flag = ref(false)
const toggle = () => {
flag.value = !flag.value
}
const beforeEnter = () => {
console.log('进入之前') //对应enter-from
}
const enter = (el:Element,done:Function) => {
console.log('进入中') //对应enter-active
console.log('el', el)
setTimeout(() => {
console.log('done', done)
done()//done这个函数就是 @after-enter 所对应的函数 即 afterEnter
}, 2000)//在这个延迟时间内再次点击切换 就会触发显示过度打断函数 }
const afterEnter = () => {
console.log('进入之后') //对应enter-to
}
const enterCancelled = () => {
console.log('显示过度打断') //显示过度打断
}
const beforeLeave = () => {
console.log('离开之前') //对应leave-from
}
const leave = () => {
console.log('离开中') //对应leave-active
}
const afterLeave = () => {
console.log('离开之后') //对应leave-to
}
const leaveCancelled = () => {
console.log('离开过度打断') //离开过度打断
}
</script> <style scoped>
/* 进入开始时刻 */
.fade-in {
/* 自定义类名 */
width: 0;
height: 0;
transform: rotate(360deg);
}
</style>

生命周期结合 GreenSock js动画库

<template>
<div>
<button @click="toggle" class="btn">切换</button>
<Transition @before-enter="beforeEnter" @enter="enter" @leave="leave">
<!-- 自定义过渡类名 -->
<keep-alive :include="['Login']" :exclude="['']" :max="5">
<Login v-if="flag"></Login>
</keep-alive>
</Transition>
</div>
</template> <script setup lang="ts">
import 'animate.css'
import gsap from 'gsap'
import Login from './components/Login.vue'
import Register from './components/register.vue'
import { ref } from 'vue'
const flag = ref(false)
const toggle = () => {
flag.value = !flag.value
}
const beforeEnter = (el: Element) => {
gsap.set(el, {
width: 0,
height: 0,
})
}
const enter = (el: Element, done: gsap.Callback) => {
gsap.to(el, {
width: 300,
height: 300,
onComplete: done,
// 用纯ts 或者 js 来操作动画 结束后 必须调用done函数来表示transition 动画结束
})
}
const leave = (el: Element, done: gsap.Callback) => { gsap.to(el, {
width: 0,
height: 0,
onComplete: done,
// 用纯ts 或者 js 来操作动画 结束后 必须调用done函数来表示transition 动画结束
})}
</script> <style scoped>
.btn{
position: absolute;
top: 200px;
left: 10%;
}
</style>

appear

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

<template>
<div>
<button @click="toggle" class="btn">切换</button>
<Transition
appear
appear-from-class="from"
appear-active-class="active"
appear-to-class="to"
>
<!-- appear 是页面一加载完成就展示的动画 再切换就不会展示动画了-->
<keep-alive :include="['Login']" :exclude="['']" :max="5">
<Login v-if="flag"></Login>
</keep-alive>
</Transition>
</div>
</template> <script setup lang="ts">
import 'animate.css'
import gsap from 'gsap'
import Login from './components/Login.vue'
import Register from './components/register.vue'
import { ref } from 'vue'
const flag = ref(true)
const toggle = () => {
flag.value = !flag.value
}
</script> <style scoped>
.btn {
position: absolute;
top: 200px;
left: 10%;
}
.from {
width: 0;
height: 0;
}
.active {
transition: all 2s ease;
}
.to {
height: 300px;
width: 300px;
}
</style>

同样的 只要是使用类来展示的动画都可以使用Animate.css | A cross-browser library of CSS animations.

  <Transition
appear
appear-active-class="animate__animated animate__fadeInLeftBig"
>
<!-- appear 是页面一加载完成就展示的动画 再切换就不会展示动画了-->
<keep-alive :include="['Login']" :exclude="['']" :max="5">
<Login v-if="flag"></Login>
</keep-alive>
</Transition>

Transition 初步使用的更多相关文章

  1. 前端深入之css篇丨2020年前,彻底掌握css动画【transition】

    写在前面 马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所 ...

  2. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  3. CSS 3学习——transition 过渡

    以下内容根据官方规范翻译以及自己的理解整理. 1.介绍 这篇文档介绍能够实现隐式过渡的CSS新特性.文档中介绍的CSS新特性描述了CSS属性的值如何在给定的时间内平滑地从一个值变为另一个值. 2.过渡 ...

  4. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

  5. Android自定义View初步

    经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...

  6. 初步认识Node 之Node为何物

    很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了.    Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...

  7. [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

    [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website develop ...

  8. css3 transition animation nick

    时光转眼即逝,又到周六了,今天写点某部分人看不起的css玩玩! 转换 转换属性transform: 浏览器前缀: -webkit-transform;-o-transform;-moz-transfo ...

  9. 深入理解CSS过渡transition

    × 目录 [1]定义 [2]过渡属性 [3]持续时间[4]延迟时间[5]时间函数[6]多值[7]阶段[8]触发[9]API 前面的话 通过过渡transition,可以让web前端开发人员不需要jav ...

  10. css3 transition属性

    最近打算学习css3知识,觉得css3写出来的效果好炫好酷,之前一直想要学习来着.可能之前的决心,毅力,耐心不够,所以想要重整起来,放下浮躁的心态,一步一个脚印,踏踏实实的来学习. 首先学习的是css ...

随机推荐

  1. uni-app 如何优雅的使用权限认证并对本地文件上下起手

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1.起因 最近有一个需求,需要使用自定义插件,来对接硬件功能,需要配合对手机的权限进行判断和提示,并在对接后对本地文件进行操作,这里给大家 ...

  2. 【算法训练营day4】LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表II

    [算法训练营day4]LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表 ...

  3. Azure Kubernetes(AKS)部署及查看应用资源

    简介 上一篇文章讲解了如何使用Azure DevOps持续部署应用到Azure Kubernetes上.但是部署是否成功?会不会遇到什么问题?项目运行中是否会出现问题?我们该怎么样查看这些问题,并且对 ...

  4. 驱动开发:内核枚举Minifilter微过滤驱动

    Minifilter 是一种文件过滤驱动,该驱动简称为微过滤驱动,相对于传统的sfilter文件过滤驱动来说,微过滤驱动编写时更简单,其不需要考虑底层RIP如何派发且无需要考虑兼容性问题,微过滤驱动使 ...

  5. 10.-ORM-基础字段及选项

    一.ORM-基础字段及选项 任何关于表结构的修改,务必在对应模型类上修改 例如 给 books_book表添加一个info字段 varchar(100) 1.在模型中添加对应的类属性 2.执行数据库迁 ...

  6. Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系

    在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...

  7. html中可以写php代码,但是文件后缀名需要是.php而不是.html。否则php程序不会被解析执行。

    html中可以写php代码,但是文件后缀名需要是.php而不是.html.否则php程序不会被解析执行. <div class="goods_title"><?p ...

  8. 九、kubernetes命令行工具kubectl

    为了方便在命令行下对集群.节点.pod进行管理,kubernetes官方提供了一个管理命令:kubectl kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集群进行操作. ...

  9. C#接口设计

    基本架构 model 实体 说得通俗一些,model中主要是定义前端传过来的变量以及其类型,或者是需要操作的数据库中的某些字段值.举个例子: namespace Test.Models.Book { ...

  10. 论文笔记 - An Explanation of In-context Learning as Implicit Bayesian Inference

    这位更是重量级.这篇论文对于概率论学的一塌糊涂的我简直是灾难. 由于 prompt 的分布与预训练的分布不匹配(预训练的语料是自然语言,而 prompt 是由人为挑选的几个样本拼接而成,是不自然的自然 ...