Transition 初步使用
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 初步使用的更多相关文章
- 前端深入之css篇丨2020年前,彻底掌握css动画【transition】
写在前面 马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所 ...
- 移动端之Android开发的几种方式的初步体验
目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...
- CSS 3学习——transition 过渡
以下内容根据官方规范翻译以及自己的理解整理. 1.介绍 这篇文档介绍能够实现隐式过渡的CSS新特性.文档中介绍的CSS新特性描述了CSS属性的值如何在给定的时间内平滑地从一个值变为另一个值. 2.过渡 ...
- CSharpGL(29)初步封装Texture和Framebuffer
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...
- Android自定义View初步
经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...
- 初步认识Node 之Node为何物
很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了. Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- css3 transition animation nick
时光转眼即逝,又到周六了,今天写点某部分人看不起的css玩玩! 转换 转换属性transform: 浏览器前缀: -webkit-transform;-o-transform;-moz-transfo ...
- 深入理解CSS过渡transition
× 目录 [1]定义 [2]过渡属性 [3]持续时间[4]延迟时间[5]时间函数[6]多值[7]阶段[8]触发[9]API 前面的话 通过过渡transition,可以让web前端开发人员不需要jav ...
- css3 transition属性
最近打算学习css3知识,觉得css3写出来的效果好炫好酷,之前一直想要学习来着.可能之前的决心,毅力,耐心不够,所以想要重整起来,放下浮躁的心态,一步一个脚印,踏踏实实的来学习. 首先学习的是css ...
随机推荐
- POJ3417 Network暗的连锁 (树上差分)
树上的边差分,x++,y++,lca(x,y)-=2. m条边可以看做将树上的一部分边覆盖,就用差分,x=1,表示x与fa(x)之间的边被覆盖一次,m次处理后跑一遍dfs统计子树和,每个节点子树和va ...
- 洛谷P1638 逛画展 (尺取法)
尺取法的经典题目: 博览馆正在展出由世上最佳的 mm 位画家所画的图画. 游客在购买门票时必须说明两个数字,aa 和 bb,代表他要看展览中的第 aa 幅至第 bb 幅画(包含 a,ba,b)之间的所 ...
- 一个好玩的deep learning Demo!
对于生活中的熟悉的动物,我们人脑经过一次扫描,便可以得到该动物的物种!那么机器是如何识别这个图片上的动物是属于哪一物种呢? 本次实验借生活中最常见的猫和狗来探究其原理! 环境准备: tensorflo ...
- ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码) ASCII简介 ASCII(American Standard ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(28)-Fiddler如何抓取Android7.0以上的Https包-下篇
1.简介 虽然依旧能抓到大部分Android APP的HTTP/HTTPS包,但是别高兴的太早,有的APP为了防抓包,还做了很多操作:① 二次加密有的APP,在涉及到关键数据通信时,会将正文二次加密后 ...
- kubelet忽然不可用
原因,有可能机器的cpu信息有变化(扩容或者缩容)解决办法: 删掉/opt/var/lib/kubelet目录下(或者/data/lib/kubelet)cpu_manager_state文件 然后m ...
- 三十二、kubernetes集群的网络实现
Kubernetes集群的网络实现 CNI介绍及集群网络选型 容器网络接口(Container Network Interface),实现kubernetes集群的Pod网络通信及管理.包括: CNI ...
- Linux网络通信(TCP套接字编写,多进程多线程版本)
预备知识 源IP地址和目的IP地址 IP地址在上一篇博客中也介绍过,它是用来标识网络中不同主机的地址.两台主机进行通信时,发送方需要知道自己往哪一台主机发送,这就需要知道接受方主机的的IP地址,也就是 ...
- 干货,深入剖析ReentrantLock源码,推荐收藏
ReentrantLock和Synchronized都是Java开发中最常用的锁,与Synchronized这种JVM内置锁不同的是,ReentrantLock提供了更丰富的语义.可以创建公平锁或非公 ...
- 打不开 github 的方法与推荐基于Vue3与Element plus的后台管理系统
一.打不开 github 的方法 1.打开本机 hosts 文件(C:\Windows\System32\drivers\etc) 2.然后在 hosts 文件里的末尾放入一下两个 IP 地址: # ...