Vue中的过渡和动画
2023-09-11 14:19:18 时间
Vue中的过渡和动画
1. 过渡
语法
- 标签:
<transition name = 'xxx'><transition >
- 类名:
-
v-enter
:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。 -
v-enter-active
:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。 -
v-enter-to
:2.1.8 版及以上定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成之后移除。 -
v-leave
:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。 -
v-leave-active
:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。 -
v-leave-to
:2.1.8 版及以上定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画完成之后移除。
-
使用步骤
第一段过渡:从显示到隐藏
- 第一步:定义末状态
- 如果不指定过渡过程中的初状态,就从当前状态执行
.xxx-leave-to{}
- 第二步:定义过渡事件和属性
.xxx-leave-active{}
到这里我们就已经完成一个过渡的状态了,但是从末状态多我们的初始状态,我们还可以接着定义
第二段过渡:从隐藏到显示
- 第三步:定义过渡后的状态
- 但是我们元素如果初始的时候有状态,那么他会瞬间覆盖此时指定的状态
- 如果没有定义过渡的初始状态,那么他就会从,自己本身的样式开始过渡
.xxx-enter-to{}
- 第四步:定义过渡时的状态,如果过渡的状态与第二步相同,可以使用并集选择器
.xxx-enter-active{}
此外我们可以指定过渡开始时候的样式,当然这个不是必选的
/*第一段过渡的初始样式*/
.xxx-leave{}
/*第二段过渡的初始样式*/
.xxx-enter{}
- 如果指定了这两个类名,那么两个阶段的过渡,就是从指定的初始样式开始的
实战
我使用vue/cli4
搭建的一个工程 点击
- 我们新建一个
AnimationTestSingle.vue
的文件,并映射成组件,写上如下代码
template
<template>
<div>
<h1>AnimationTestSingle</h1>
<br />
<transition name="fade">
<div class="box" v-show="isShow">toggle</div>
</transition>
<br>
<button @click="handleToggle">toggle</button>
</div>
</template>
JS
export default {
data() {
return {
isShow: true
};
},
methods: {
handleToggle() {
this.isShow = !this.isShow;
}
}
};
CSS
.box{
width: 200px;
height: 200px;
background-color: yellowgreen;
text-align: center;
line-height: 200px;
}
此时的界面是这样的
只要进行点击就会显示和隐藏
2. 下面给他加上动画效果
.fade-leave-to{
opacity: 0;
color: red;
/* 只有块元素才能 transform 的属性才起作用 */
transform: translateY(200px);
}
.fade-leave-active,.fade-enter-active{
transition:all 1s;
}
.fade-enter-to{
transform: scale(6);
background-color: #fff;
}
需要注意的是
- 我们没有为每一次的过渡指定过渡的初始样式,他每一次都是从自身的样式开始过渡
2. 动画
使用动画的语法和过渡差不多,甚至更简单
步骤
- 定义关键帧
@keyframes bounce-in {
0% {
transform: scale(0);
}
25%{
transform: scale(1.5);
}
50% {
transform: scale(1);
}
75%{
transform: scale(1.2);
}
100% {
transform: scale(1);
}
}
- 定义类名,我们只需要定义过渡时的类名就可以了
.bounce-enter-active {
animation: bounce-in .5s;
}
.bounce-leave-active {
animation: bounce-in .5s reverse;
}
实战
我们将上一个文件进行复制,把改<transition>
的标签为
<transition name="bounce">
然后把上面的代码进行复制,就会看到了动画的效果
相关文章
- vue - check-versions.js for chalk
- 【Vue+element+admin】登陆页面篇(login.vue)
- 【Vue】vue中VM的生命周期及加载和销毁实例
- Vue - 实现任意内容展开 / 收起功能组件(支持自定义高度、动态展开与折叠、自定义展开与收起文案、动态增删数据自动计算高度、过渡动画等)
- Vue - 实现复制内容到剪贴板(一键复制)
- Vue插槽详解 | 什么是插槽?
- vue.js之过渡动画
- vue中bus.$on事件被多次绑定
- vue双向数据流
- Vue 国际化之 vue-i18n 的使用
- Vue通过ref获取不到$refs
- Vue 数据双向绑定
- Vue——核心思想--mvvm
- vue过渡 & 动画---进入/离开 & 列表过渡
- 【Vue】vue组件和vue插件的创建和使用(底部栏组件、Toast 和 Notify通知插件)
- 【Vue】vue基础语法——自定义指令、过滤、组件和动画(内附详细案例代码)——day04
- Vue报错笔记(1)vue.esm.js?efeb:628 [Vue warn]: Property or method “handleClick“ is not defined on the...
- vue源码中的一些工具方法
- Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理
- vue-解决Vue打包上线之后部分CSS不生效的问题