详解Vue中过度动画效果应用
发布时间 - 2026-01-11 01:16:42 点击率:次一、实现动画过渡效果的几种方式

实现动画必须要将要进行动画的元素利用<transition>标签进行包裹
1、利用CSS样式实现过渡效果
<transition name="fade"></transition>
1.v-enter: 定义进入过渡的开始状态。在元素被插入时生效,在下一个帧移除。
2.v-enter-active: 定义进入过渡的结束状态。在元素被插入时生效,在 transition/animation 完成之后移除。
3.v-leave: 定义离开过渡的开始状态。在离开过渡被触发时生效,在下一个帧移除。
4.v-leave-active: 定义离开过渡的结束状态。在离开过渡被触发时生效,在 transition/animation 完成之后
通过name的名称进行重命名,在样式文件中进行.fade-enter-active设置动画的效果即transition属性,需要注意的是动画结束后样式将会移除,所以如果想要动画实现之后元素保持有某个样式,则需要transition标签里面的元素的样式表中进行设置,此情况是针对元需要通过改变元素的属性来显示元素,如定位top,left以及通过transform将显示的元素的位置改变从而让元素出现在当前的视图窗口中时,但是如果元素v-show为true之后元素已经在视图中央显示了,不需要位置的移动将元素移动到视图中,只是想要显示的时候显示有动画效果的,则直接将动画结束的属性设置在v-enter-active/v-leave-active中即可。也就是说动画的属性如果只是产生效果,不对元素的任何属性进行修改,也就是动画中的属性样式不需要永久添加到dom元素中,则直接按后者的方式定义,如果说动画的属性同时相对元素进行样式设计,属性样式需要被添加到dom元素上,则需要按照前者的方式。
<transition name="fold">
<div class="shopcart-list" v-show="listShow">
<div class="list-header">
<h1 class="title">购物车</h1>
<span class="empty" @click="empty">清空</span>
</div>
<div class="list-content" ref="list">
<ul>
<li class="food border-1px" v-for="(food,index) in selectFoods" v-show="food.count>0">
<span class="name">{{selectName[index]}}</span>
<div class="price">
<span>¥{{food.price*food.count}}</span>
</div>
<div class="cartcontrol-wrapper">
<v-cartcontrol :food="food"></v-cartcontrol>
</div>
</li>
</ul>
</div>
</div>
</transition>
.fold-enter-active,.fold-leave-active transition:all 0.5s .fold-enter,.fold-leave transform :translate3d(0,0,0) .shopcart-list position:absolute transform:translate3d(0,-100%,0)//动画结束后的效果需要在此处进行设置,设置在.fold-enter-active中,元素动画结束后该样式属性会被移除掉,将会看不到想要的效果 top: 100%//元素即使显示也不再视图窗口中,通过transform实现显示 z-index:-1 width:100%
2、利用animation或者是动画库实现动画效果
<div id="example-2"> <button @click="show = !show">Toggle show</button> <transition name="bounce"> <p v-if="show">Look at me!</p> </transition> </div>
new Vue({
el: '#example-2',
data: {
show: true
}
})
.bounce-enter-active {
animation: bounce-in 0.5s linear;
}
.bounce-leave-active {
animation: bounce-out 0.5s linear;
}
@keyframes bounce-in {
0% {
transform: scale(0);
}
50% {
transform: scale(1.5);
}
100% {
transform: scale(1);
}
}
@keyframes bounce-out {
0% {
transform: scale(1);
}
50% {
transform: scale(1.5);
}
100% {
transform: scale(0);
}
}
3、自定义过度类名
- enter-class
- enter-active-class
- leave-class
- leave-active-class
他们的优先级高于普通的类名,这对于 Vue 的过渡系统和其他第三方 CSS 动画库,如 Animate.css 结合使用十分有用。
<link href="https://unpkg.com/animate.css@3.5.1/animate.min.css" rel="external nofollow" rel="stylesheet" type="text/css"> <div id="example-3"> <button @click="show = !show"> Toggle render </button> <transition name="custom-classes-transition" enter-active-class="animated tada" leave-active-class="animated bounceOutRight" > <p v-if="show">hello</p> </transition> </div>
new Vue({
el: '#example-3',
data: {
show: true
}
})
可以在样式中同时使用transition和animation
4、利用JavaScript钩子函数实现过渡效果
<transition v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter" v-on:enter-cancelled="enterCancelled" v-on:before-leave="beforeLeave" v-on:leave="leave" v-on:after-leave="afterLeave" v-on:leave-cancelled="leaveCancelled" > <!-- ... --> </transition>
methods: {
// --------
// 进入中
// --------
beforeEnter: function (el) {
// ...
},
// 此回调函数是可选项的设置
// 与 CSS 结合时使用
enter: function (el, done) {
// ...
done()
},
afterEnter: function (el) {
// ...
},
enterCancelled: function (el) {
// ...
},
// --------
// 离开时
// --------
beforeLeave: function (el) {
// ...
},
// 此回调函数是可选项的设置
// 与 CSS 结合时使用
leave: function (el, done) {
// ...
done()
},
afterLeave: function (el) {
// ...
},
// leaveCancelled 只用于 v-show 中
leaveCancelled: function (el) {
// ...
}
}
在使用钩子函数实现动画的时候注意dom的异步刷新,需要结合this.$nextTick(),同时在leave和enter中设置样式前最好迫使dom进行回流(reflow)使dom重新渲染,如获取元素的offsetHeight等,然后在this.$nextTick()中设置新的样式,不然又可能实现不了动画的效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# vue过度动画
# vue过度
# vue
# css过度
# 详解vue过度效果与动画transition使用示例
# 深入理解Vue的过度与动画
# Vue学习笔记进阶篇之单元素过度
# Vue中transition标签的基本使用教程
# vue中transition组件在项目中运用小结
# Vue transition实现点赞动画效果的示例
# vue使用transition组件动画效果的实例代码
# Vue transition过渡组件详解
# 移除
# 将会
# 不需要
# 结束后
# 回调
# 则需
# 的是
# 他们的
# 被插
# 出现在
# 或者是
# 几种
# 自定义
# 如果说
# 购物车
# 第三方
# 需要注意
# 又可
# 大家多多
# 清空
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Bootstrap整体框架之JavaScript插件架构
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
如何在云虚拟主机上快速搭建个人网站?
如何在IIS中新建站点并解决端口绑定冲突?
Mybatis 中的insertOrUpdate操作
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Firefox Developer Edition开发者版本入口
免费网站制作appp,免费制作app哪个平台好?
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
node.js报错:Cannot find module 'ejs'的解决办法
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
装修招标网站设计制作流程,装修招标流程?
深圳网站制作的公司有哪些,dido官方网站?
Laravel PHP版本要求一览_Laravel各版本环境要求对照
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Java遍历集合的三种方式
如何在Windows虚拟主机上快速搭建网站?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何快速使用云服务器搭建个人网站?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
如何快速搭建个人网站并优化SEO?
公司网站制作价格怎么算,公司办个官网需要多少钱?
Laravel如何实现用户密码重置功能?(完整流程代码)
php485函数参数是什么意思_php485各参数详细说明【介绍】
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
英语简历制作免费网站推荐,如何将简历翻译成英文?
Android GridView 滑动条设置一直显示状态(推荐)
如何用虚拟主机快速搭建网站?详细步骤解析
Laravel怎么上传文件_Laravel图片上传及存储配置
iOS验证手机号的正则表达式
Python高阶函数应用_函数作为参数说明【指导】
如何在阿里云ECS服务器部署织梦CMS网站?
浅谈redis在项目中的应用
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
如何基于PHP生成高效IDC网络公司建站源码?
七夕网站制作视频,七夕大促活动怎么报名?
Python面向对象测试方法_mock解析【教程】
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
Swift中swift中的switch 语句
java获取注册ip实例
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
如何在香港免费服务器上快速搭建网站?

