1、首先,在Vue项目中的src/components文件夹下创建一个名为AnimatedBox.vue的文件。
2、编辑AnimatedBox.vue文件,添加以下代码:
<template>
<div class="animated-box" @click="toggle">
<transition name="fade">
<div v-if="isVisible" class="box"></div>
</transition>
</div>
</template>
<script>
export default {
data() {
return {
isVisible: true,
};
},
methods: {
toggle() {
this.isVisible = !this.isVisible;
},
},
};
</script>
<style scoped>
.animated-box {
width: 100px;
height: 100px;
background-color: lightblue;
position: relative;
}
.box {
width: 50px;
height: 50px;
background-color: red;
position: absolute;
top: 25px;
left: 25px;
}
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter,
.fade-leave-to {
opacity: 0;
}
</style>
在这个示例中,我们创建了一个名为AnimatedBox的Vue组件。当用户点击这个组件时,它会切换isVisible数据属性的值,从而触发动画效果。我们使用组件包裹
元素,并为其添加一个名为fade的过渡类。然后,我们在
3、最后,在需要使用AnimatedBox组件的地方引入它,例如在App.vue文件中:
<template>
<div id="app">
<AnimatedBox />
</div>
</template>
<script>
import AnimatedBox from './components/AnimatedBox.vue';
export default {
components: {
AnimatedBox,
},
};
</script>
现在,当你点击AnimatedBox组件时,红色方块会以淡入淡出的方式显示和隐藏。
4、其他方法
<template>
<div>
<button @click="showOrHide">显示/隐藏</button>
<transition name="hello" appear>
<h1 v-show="isShow">你好啊</h1>
</transition>
</div>
</template>
<script>
export default {
name: "Test2",
data(){
return{
isShow:true,
}
},
methods:{
showOrHide(){
this.isShow = !this.isShow;
}
}
}
</script>
<style scoped>
h1{
background-color: orange;
}
.hello-enter-active{
animation: a 1s;
}
.hello-leave-active{
animation: a 1s reverse;
}
@keyframes a {
from{
transform: translateX(-100px);
}
to{
transform: translateX(0px);
}
}
</style>
<template>
<div>
<button @click="showOrHide">显示/隐藏</button>
<transition name="hello" appear>
<h1 v-show="isShow">你好啊</h1>
</transition>
</div>
</template>
<script>
export default {
name: "Test3",
data(){
return{
isShow:true,
}
},
methods:{
showOrHide(){
this.isShow = !this.isShow;
}
}
}
</script>
<style scoped>
h1{
background-color: orange;
transition: 0.5s linear;
}
/*进入的起点*/
.hello-enter{
transform: translateX(-100%);
}
/*进入的终点*/
.hello-enter-to{
transform: translateX(0);
}
/*离开的起点*/
.hello-leave{
transform: translateX(0);
}
/*离开的终点*/
.hello-leave-to{
transform: translateX(-100%);
}
</style>
多个元素过度
<template>
<div>
<button @click="showOrHide">显示/隐藏</button>
<transition-group name="hello" appear>
<h1 v-show="isShow" key="1">你好啊</h1>
<h1 v-show="isShow" key="2">你好啊2</h1>
</transition-group>
</div>
</template>
<script>
export default {
name: "Test4",
data(){
return{
isShow:true,
}
},
methods:{
showOrHide(){
this.isShow = !this.isShow;
}
}
}
</script>
<style scoped>
h1{
background-color: orange;
transition: 0.5s linear;
}
/*进入的起点*/
.hello-enter{
transform: translateX(-100%);
}
/*进入的终点*/
.hello-enter-to{
transform: translateX(0);
}
/*离开的起点*/
.hello-leave{
transform: translateX(0);
}
/*离开的终点*/
.hello-leave-to{
transform: translateX(-100%);
}
</style>
5、引入第三方库(Animate.csss):
地址:https://animate.style/
引入:
npm install animate.css
导入你的文件
import 'animate.css';
使用:
<template>
<div>
<button @click="showOrHide">显示/隐藏</button>
<transition appear name="animate__animated animate__bounce" enter-active-class="animate__tada" leave-active-class="animate__backOutUp">
<h1 v-show="isShow" key="1">你好啊test5</h1>
</transition>
</div>
</template>
<script>
import 'animate.css';
export default {
name: "Test5",
data(){
return{
isShow:true,
}
},
methods:{
showOrHide(){
this.isShow = !this.isShow;
}
}
}
</script>
<style scoped>
h1{
background-color: orange;
}
</style>
6、总结