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 ...
随机推荐
- STM32的SPI口的DMA读写[原创www.cnblogs.com/helesheng]
SPI是我最常用的接口之一,连接管脚仅为4根:在常见的芯片间通信方式中,速度远优于UART.I2C等其他接口.STM32的SPI口的同步时钟最快可到PCLK的二分之一,单个字节或字的通信时间都在us以 ...
- 2022-08-21-Freewind主题_cdn替换版
layout: post cid: 16 title: Freewind主题 cdn替换版 slug: 16 date: 2022/08/21 14:06:00 updated: 2022/08/21 ...
- 39.BasicAuthentication认证
BasicAuthentication认证介绍 BasicAuthentication使用HTTP基本的认证机制 通过用户名/密码的方式验证,通常用于测试工作,尽量不要线上使用 用户名和密码必须在HT ...
- SpringCloud(二) - Eureka注册中心,feign远程调用,hystrix降级和熔断
1.项目模块介绍 2. 父项目 主要依赖 spring-cloud 的 版本控制 <properties> <!-- springCloud 版本 --> <scd.ve ...
- SQL--Row_Number() over()的使用
1.语法 --over里面有两个参数 --partition by 用于分割区域 此参数可选 --order by 用于排序 此参数必有 row_number() over(partition by ...
- promise 的串行执行
function pri (num) { return new Promise((resolve,reject) => { console.log('开始'+num) res ...
- 要写文档了,emmm,先写个文档工具吧——DocMarkdown
前言 之前想用Markdown来写框架文档,找来找去发现还是Jekyll的多,但又感觉不是很合我的需求 于是打算自己简单弄一个展示Markdown文档的网站工具,要支持多版本.多语言.导航.页内导航等 ...
- 更改安装Oracle数据库时设定的System sys等用户的密码
因本地Oracle数据库安装久远,不知道连接账号密码,查阅了一些资料最终修改成功,Mark up! 1 在开始菜单找到Oracle服务,打开SQL plus 2 输入命令连接到数据库并修改部分用户密码 ...
- jmeter接口自动化-通过csv文件读取用例并执行测试
最近在公司测试中经常使用jmeter这个工具进行接口自动化,简单记录下~ 一.在csv文件中编写好用例 首先在csv文件首行填写相关参数(可根据具体情况而定)并编写测试用例.脚本可通过优先级参数控制执 ...
- 备考CISP-PTE之文件上传
upload-labs 直接下载放到phpstudy打开即可. 第一关 查看源码,可以看到js代码定义了一个checkFile函数来对上传的文件进行后缀检查,只允许上传jpg.png.gif文件. f ...