Vue实现动画的几种方式

除了原生的js方法实现动画效果之外,在vue中还有两种常用的动画方法。

1.vue内置组件transition

通过点击事件控制元素隐藏显示
在需要加动画的元素外添加transition标签,并添加一个名字name=“fade”。

<transition name="fade">
  <div v-if="show"></div>
</transition>
<button @click="toggle">点击动画</button>

在css样式中添加动画修饰,实现淡入淡出效果。

.fade-enter{
	opacity:0
}
.fade-enter-to{
	opacity:1
}
.fade-enter-active{
	transition:all 1s
}
.fade-leave{
	opacity:1
}
.fade-leave-to{
	opacity:0
}
.fade-leave-active{
	transition:all 1s
}

在methods方法中添加按钮的点击事件,就可以实现元素的淡入淡出效果。

data(){
	return {
		show:true
	}
},
methods:{
	toggle(){
		this.show = !this.show
	}
}

如果在transition标签内有多个元素,则要把transition标签换成transition-group,并且要在标签内部的元素上添加不同的key值。

<transition-group name="fade">
  <div v-if="show" key=1></div>
  <div v-if="show" key=2></div>
  <div v-if="show" key=3></div>
</transition-group>
<button @click="toggle">点击动画</button>

2. 引用animate.css插件

首先需要使用npm install animate.css命令下载插件,在node_moudles里面找到animate.css样式。
找到安装路径
动画插件可能会在整个项目中使用,所以我在main.js文件中引入,接着在需要使用插件的元素外面添加transition标签,在标签内写enter-active-class和leave-active-class两个属性,其中这里的slideInRight和bounceOutRight代表动画名称,animated表示动画过渡时间。

<transition
	enter-active-class='slideInRight animated'
	leave-active-class='bounceOutRight animated'
>
<div v-if="show"></div>
</transition>

animated
在animate.css官网有很多具体的动画效果演示,选择喜欢的直接写在动画属性里就可以了。
官网动画效果

Vue实现过渡动画,可以使用内置的 `transition` 组件,它为元素或组件的进入和离开添加过渡动画效果。通过 `transition` 组件,可以为以下几种情形添加动画: - 条件渲染(使用 `v-if`) - 条件展示(使用 `v-show`) - 动态组件 - 组件根节点 ### 基本用法 要实现过渡动画,首先需要将目标元素或组件包裹在 `<transition>` 标签中。例如,当一个元素的显示状态发生变化时,可以为其添加进入和离开的动画效果: ```vue <template> <div> <button @click="show = !show">Toggle</button> <transition name="fade"> <h2 v-if="show">Hello World</h2> </transition> </div> </template> <script setup> import { ref } from 'vue' const show = ref(false) </script> ``` 在上面的代码中,`name="fade"` 指定了过渡动画的类名前缀,Vue 会自动应用相应的 CSS 过渡类。 ### 动画的 CSS 类 在 CSS 中,需要定义与 `name` 属性相对应的过渡类。这些类控制动画的不同阶段: - `v-enter`:定义进入动画的初始状态 - `v-enter-active`:定义进入动画的激活状态,通常在这里设置过渡时间和曲线 - `v-enter-to`:定义进入动画的结束状态 - `v-leave`:定义离开动画的初始状态 - `v-leave-active`:定义离开动画的激活状态 - `v-leave-to`:定义离开动画的结束状态 例如,可以定义一个简单的淡入淡出动画: ```css .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter-from, .fade-leave-to { opacity: 0; } ``` ### 动画的使用 除了简单的淡入淡出效果,还可以使用 `@keyframes` 来定义更复杂的动画效果。例如,实现一个从左侧滑入和向右侧滑出的动画: ```vue <template> <div> <button @click="isShow = !isShow">显示/隐藏</button> <transition name="slide"> <h1 v-show="isShow">你好啊!</h1> </transition> </div> </template> <script> export default { data() { return { isShow: true } } } </script> <style scoped> .slide-enter-active { animation: slideIn 1s; } .slide-leave-active { animation: slideOut 1s; } @keyframes slideIn { from { transform: translateX(-100%); } to { transform: translateX(0); } } @keyframes slideOut { from { transform: translateX(0); } to { transform: translateX(100%); } } </style> ``` 在上面的示例中,`slideIn` 和 `slideOut` 是两个自定义的动画,分别用于元素的进入和离开效果。 ### 列表过渡 除了单个元素的过渡,Vue 还支持列表的过渡动画。可以使用 `<transition-group>` 组件来为列表中的每个元素添加过渡效果。例如: ```vue <template> <div> <button @click="addItem">添加</button> <transition-group name="list" tag="ul"> <li v-for="(item, index) in items" :key="item.id"> {{ item.text }} <button @click="removeItem(index)">删除</button> </li> </transition-group> </div> </template> <script> export default { data() { return { items: [ { id: 1, text: 'Item 1' }, { id: 2, text: 'Item 2' } ], nextId: 3 } }, methods: { addItem() { this.items.push({ id: this.nextId++, text: `Item ${this.nextId}` }) }, removeItem(index) { this.items.splice(index, 1) } } } </script> <style scoped> .list-enter-active, .list-leave-active { transition: all 1s; } .list-enter-from, .list-leave-to { opacity: 0; transform: translateY(30px); } </style> ``` 在上面的示例中,`<transition-group>` 包裹了列表项,并为每个列表项的进入和离开添加了过渡动画。 ### 过渡的模式 Vue 的 `transition` 组件支持两种过渡模式: - `in-out`:新元素先进入,旧元素后离开 - `out-in`:旧元素先离开,新元素后进入 可以通过 `mode` 属性来指定过渡模式: ```vue <transition name="fade" mode="out-in"> <!-- 动态组件或条件渲染的元素 --> </transition> ``` ### 总结 Vue 提供了强大的内置组件 `transition` 和 `transition-group`,可以方便地实现各种过渡动画效果。通过结合 CSS 过渡类和 `@keyframes`,可以创建出丰富的动画效果,从而提升用户体验。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值