[vue3]Transition过渡效果

触发条件

应用过渡和动画效果,主要基于状态变化

状态变化条件

1、v-if

2、v-show

3、动态组件 切换

4、改变属性 key

基于css的过渡效果

知识点说明

1、一般在 .v-enter-from、.v-leave-to,设置 开始点 和 结束点

2、在 .v-enter-active、.v-leave-active 设置过渡效果

过渡效果命名

知识点说明

添加 name 属性,过渡class就不是以v为前缀

举个栗子

js 复制代码
<Transition name="fade">
	...
</Transition>

.fade-enter-active,
.fade-leave-active {
    transition: all 0.5s ease;
}

.fade-enter-from,
.fade-leave-to {
    transform: translateX(100px);
    opacity: 0;
}

Transition + transition

知识点说明
<Transition> 只支持 单个元素 或 组件,作为其插槽内容,如果是组件,必须仅有一个根元素

举个栗子

js 复制代码
import { ref } from 'vue'
const isShow = ref(false)

<button @click="isShow = !isShow">{{ isShow ? '隐藏' : '显示' }}</button>

<Transition name="fade">
	<div v-if="isShow">你好,赵今麦!</div>
</Transition>

.fade-enter-active,
.fade-leave-active {
    transition: all 0.5s ease;
}

.fade-enter-from,
.fade-leave-to {
    transform: translateX(100px);
    opacity: 0;
}

Transition + animation

js 复制代码
import { ref } from 'vue'
const isShow = ref(false)

<button @click="isShow = !isShow">{{ isShow ? '隐藏' : '显示' }}</button>

<Transition name="bounce">
	<div v-if="isShow" style="text-align: center;">这是一段会跳动的文字</div>
</Transition>

@keyframes bounce-in {
    0% {
        transform: scale(0);
    }
    50% {
        transform: scale(1.25);
    }
    100% {
        transform: scale(1);
    }
}

.bounce-enter-active {
    animation: bounce-in 0.5s ease;
}
.bounce-leave-active {
    animation: bounce-in 0.5s ease reverse;
}

自定义过渡class

自定义过渡class的props

js 复制代码
enter-from-class
enter-active-class
enter-to-class
leave-from-class
leave-active-class
leave-to-class

覆盖class,在应用第三方动画库非常有用,比如 Animate.css

js 复制代码
import { ref } from 'vue'
const isShow = ref(false)

<button @click="isShow = !isShow">{{ isShow ? '隐藏' : '显示' }}</button>

<Transition
    name="custom-classes"
    enter-active-class="animate__animated animate__backInRight"
    leave-active-class="animate__animated animate__heartBeat"
>
	<div v-if="isShow">是心动的感觉啊...</div>
</Transition>

<style lang="scss" scoped>
@import "https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css";
</style>

深层级过渡与显式过渡时长

js 复制代码
<Transition
	name="nested"
	:duration="550"
	// :duration="{ enter: 500, leave: 800 }"
>
    <div v-if="show" class="outer">
        <div class="inner">
        	Hello
        </div>
    </div>
</Transition>

.nested-enter-active .inner,
.nested-leave-active .inner {
	transition: all 0.3s ease-in-out;
}
.nested-enter-active .inner {
	transition-delay: 0.25s;
}

.nested-enter-from .inner,
.nested-leave-to .inner {
    transform: translateX(30px);
    opacity: 0;
}

性能考虑

尽量使用 transform 和 opacity 属性,制作动效非常高效

优点

1、动效不影响DOM结构,css布局不会重新计算

2、大多数浏览器在执行 transform 动效时,会利用GPU进行硬件加速

绝对自律,是通往自由的唯一道路 ------ 冬泳怪鸽

相关推荐
军军君0113 小时前
数字孪生监控大屏实战模板:智能业务大数据监管平台
css·vue.js·elementui·typescript·前端框架·echarts·less
jiayong2315 小时前
第 38 课:任务列表里高亮当前正在查看详情的任务
开发语言·前端·javascript·vue.js·学习
搬搬砖得了16 小时前
Vue 响应式对象异步赋值作为 Props:二次渲染问题与组件设计哲学
前端·vue.js
前端那点事19 小时前
彻底弄懂async/await!解决回调地狱,Vue异步开发必备(超全实战)
前端·vue.js
A_nanda20 小时前
VS2022安装QT6.5.3后,如何更新项目配置
前端·javascript·vue.js
Lkstar20 小时前
读懂 Vue 双端 Diff 算法:从源码到原理,一篇彻底搞懂
vue.js
早起傻一天~G21 小时前
vue2+element-UI表单封装
前端·vue.js·ui
Live&&learn1 天前
Vue项目打包后内联字符串不显示的原因
前端·javascript·vue.js
宁雨桥1 天前
深入剖析Vue2与Vue3响应式原理:从Object.defineProperty到Proxy的演进
前端·vue.js
ejinxian1 天前
Rust的GUI方案中,Slint、Azul、egui、iced、Druid、Tauri
前端·javascript·vue.js