动画的定义和样式还是先用css写好,vue帮助我们在合适的事件调用动画效果。
<template>
<div>
<button @click="isShow = !isShow">显示/隐藏button>
<h1 v-show="isShow" class="come">你好呀h1>
<h1 v-show="isShow" class="go">你好呀h1>
div>
template>
<script>
export default {
name: 'TestVue',
data() {
return {
isShow:true
}
}
}
script>
<style scoped>
h1{
background: lightsalmon;
}
.come{
animation: yang 1s;
}
.go {
animation: yang 1s reverse;
}
/* 定义动画 */
@keyframes yang {
from{
transform: translateX(-100%);
}
to {
transform: translateX(0px);
}
}
style>
动画效果如下:
上面的是.come的样式
下面的是.go的样式
即显示的时候从左向右滑入,隐藏的时候从右向左滑入
其实滑入滑出和我们已经定义好了,即.go和.come
的效果。
vue就是决定在合适的时候加上合适的动画效果
。
实现方法:
模板中对于有动画效果的标签使用
进行包裹.v-enter-active
代替;.go要使用.v-leave-active
代替,这样vue才能识别。<template>
<div>
<button @click="isShow = !isShow">显示/隐藏button>
<transition>
<h1 v-show="isShow">你好呀h1>
transition>
div>
template>
<script>
export default {
name: 'TestVue',
data() {
return {
isShow:true
}
}
}
script>
<style scoped>
h1{
background: lightsalmon;
}
.v-enter-active {
animation: yang 1s;
}
.v-leave-active {
animation: yang 1s reverse;
}
/* 定义动画 */
@keyframes yang {
from{
transform: translateX(-100%);
}
to {
transform: translateX(0px);
}
}
style>
这样就可以实现上述效果
appear属性为true时表示初始进入页面就有动画效果
两种写法:
<transition :appear="true">
<h1 v-show="isShow">你好呀h1>
transition>
<transition appear>
<h1 v-show="isShow">你好呀h1>
transition>
实现效果如下
transition可以有name属性,但是如果transition设置了name属性,对应的动态类属性的名字也要及逆行改变,将v
替换为transition的name
即如果transition的name是hello,那么两个动态类名应该是:.hello-enter-active
和.hello-leave-active
eg:
<template>
<div>
<button @click="isShow = !isShow">显示/隐藏button>
<transition name="hello">
<h1 v-show="isShow">你好呀h1>
transition>
div>
template>
<script>
export default {
name: 'TestVue',
data() {
return {
isShow:true
}
}
}
script>
<style scoped>
h1{
background: lightsalmon;
}
.hello-enter-active {
animation: yang 1s;
}
.hello-leave-active {
animation: yang 1s reverse;
}
/* 定义动画 */
@keyframes yang {
from{
transform: translateX(-100%);
}
to {
transform: translateX(0px);
}
}
style>
设置 name属性可以实现不同的
设置不同的动态样式
编译的时候 transition标签不会被编译进去, transition只是vue的一个标签
使用过渡实现:
对于进入的过渡效果需要依赖vue提供的两个类.v-enter
(进入的起点)和.v-enter-to
(进入的终点),还需要结合transition: 0.5s;
指定变换的事件和样式,一般谁变就给谁配置transition
。
离开的过渡也是一样的
<template>
<div>
<button @click="isShow = !isShow">显示/隐藏button>
<transition name="hello">
<h1 v-show="isShow">你好呀h1>
transition>
div>
template>
<script>
export default {
name: 'TestVue',
data() {
return {
isShow:true
}
}
}
script>
<style scoped>
h1{
background: lightsalmon;
/* 谁变给谁配置transition */
/* 定义变换时间 */
transition: 0.5s;
}
/* 进入的起点 */
.hello-enter{
transform: translateX(-100%);
}
/* 进入的终点 */
.hello-enter-to {
transform: translateX(0);
}
/* 离开的起点 */
.hello-leave {
transform: translateX(0);
}
/* 离开的终点 */
.hello-leave-to {
transform: translateX(-100%);
}
style>
也可以使用.hello-enter-active
指定变换的事件和方式
<template>
<div>
<button @click="isShow = !isShow">显示/隐藏button>
<transition name="hello">
<h1 v-show="isShow">你好呀h1>
transition>
div>
template>
<script>
export default {
name: 'TestVue',
data() {
return {
isShow:true
}
}
}
script>
<style scoped>
h1{
background: lightsalmon;
/* 谁变给谁配置transition */
/* 定义变换时间 */
/* transition: 0.5s; */
}
/* 进入的起点 */
.hello-enter{
transform: translateX(-100%);
}
/* 进入的终点 */
.hello-enter-to {
transform: translateX(0);
}
/* 离开的起点 */
.hello-leave {
transform: translateX(0);
}
/* 离开的终点 */
.hello-leave-to {
transform: translateX(-100%);
}
/* 进入的过程 */
.hello-enter-active{
transition: 0.5s;
}
/* 离开的过程 */
.hello-leave-active {
transition: 0.5s;
}
style>
两个注意点:
transition-group
key
值。<template>
<div>
<button @click="isShow = !isShow">显示/隐藏button>
<transition-group name="hello">
<h1 v-show="isShow" key="1">你好呀h1>
<h1 v-show="isShow" key="2">yangh1>
transition-group>
div>
template>
<script>
export default {
name: 'TestVue',
data() {
return {
isShow:true
}
}
}
script>
<style scoped>
h1{
background: lightsalmon;
/* 谁变给谁配置transition */
/* 定义变换时间 */
/* transition: 0.5s; */
}
/* 进入的起点 */
.hello-enter{
transform: translateX(-100%);
}
/* 进入的终点 */
.hello-enter-to {
transform: translateX(0);
}
/* 离开的起点 */
.hello-leave {
transform: translateX(0);
}
/* 离开的终点 */
.hello-leave-to {
transform: translateX(-100%);
}
/* 进入的过程 */
.hello-enter-active{
transition: 0.5s;
}
/* 离开的过程 */
.hello-leave-active {
transition: 0.5s;
}
style>
对于进入的动态样式,vue为我们提供了3个类:
.hello-enter
(进入的起点)
.hello-enter-to
( 进入的终点)
.hello-enter-active
(进入的过程)
.hello-enter-active
一般用于动画效果,.hello-enter
和.hello-enter-to
一般用于过渡效果。
同样对于离开的动态样式,vue为我们提供了3个类:
.hello-leave
(离开的起点)
.hello-leave-to
( 离开的终点)
.hello-leave-active
(离开的过程)
.hello-leave-active
一般用于动画效果,.hello-leave
和.hello-leave-to
一般用于过渡效果。
npm的animate.css
动画库:https://animate.style/
npm install animate.css --save
import "animate.css"
<transition-group name="animate__animated animate__bounce"
enter-active-class="animate__wobble"
leave-active-class="animate__backOutDown">
<h1 v-show="isShow" key="1">你好呀h1>
<h1 v-show="isShow" key="2">yangh1>
transition-group>
name="animate__animated animate__bounce"
表示引入animate.css库
enter-active-class
:进入动画
leave-active-class
:离开动画
在animate官网中https://animate.style/查看动态样式并引入。
eg:
<template>
<div>
<button @click="isShow = !isShow">显示/隐藏button>
<transition-group name="animate__animated animate__bounce" enter-active-class="animate__wobble"
leave-active-class="animate__backOutDown">
<h1 v-show="isShow" key="1">你好呀h1>
<h1 v-show="isShow" key="2">yangh1>
transition-group>
div>
template>
<script>
import "animate.css"
export default {
name: 'TestVue',
data() {
return {
isShow:true
}
}
}
script>
<style scoped>
h1{
background: lightsalmon;
}
style>
效果:
当然还有许多其他的动画库,可自行引入。