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 ...
随机推荐
- 洛谷P3391 文艺平衡树 (Splay模板)
模板题. 注意标记即可,另外,涉及区间翻转操作,记得设立首尾哨兵. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int ...
- 使用 Apache Hudi 实现 SCD-2(渐变维度)
数据是当今分析世界的宝贵资产. 在向最终用户提供数据时,跟踪数据在一段时间内的变化非常重要. 渐变维度 (SCD) 是随时间推移存储和管理当前和历史数据的维度. 在 SCD 的类型中,我们将特别关注类 ...
- Kubeadm部署高可用K8S集群
一 基础环境 1.1 资源 节点名称 ip地址 VIP 192.168.12.150 master01 192.168.12.48 master02 192.168.12.242 master03 1 ...
- 各大厂 C/C++ 编程规范详解
来吧!各大厂知名规范体系~ 各有特点各有侧重~ Google C++ Style Guide Google C++ Style Guide,[中文版],简称 GSG,谷歌的 C++ 编程规范,在国内有 ...
- NLP之基于Transformer的句子翻译
Transformer 目录 Transformer 1.理论 1.1 Model Structure 1.2 Multi-Head Attention & Scaled Dot-Produc ...
- 2022HNCTF--WEB
@ 目录 [Week1]Interesting_http 分析 payload [Week1]2048 分析 payload [Week1]easy_html 分析 paylaod [Week1]In ...
- Oracle用户创建及删除
偶尔会用到,记录.分享. 1. Oracle用户创建 #创建用户表空间create tablespace $username datafile '/u01/app/oracle/oradata/ufg ...
- 4.drf-版本管理
根据RESTful规范,后端API中需要体现出版本,DRF中支持5种版本的设置,常见的三种如下 1. URL的GET中传递参数 在视图类中定义 from rest_framework.versioni ...
- Apache ShenYu 集成 RocketMQ 实时采集海量日志的实践
本文作者:胡泰室, 快手Java开发工程师. 认识Apache ShenYu(神禹) 网关最重要的是流量治理,而流量治理与大禹治水有很多相似的地方,因此,网关的流量治理项目被命名为神禹. Shen ...
- 链表实现-回文palindrome判断
1.数字回文判断(逆转,分离未位,砍掉个位,保存原来) s = s * 10 + a%10 a = a/10 2.字符串判断回文 package main //思路: 开发一个栈来来存放链表的上半段f ...