vue提供了一个封装动画的组件 <transition name="tr"></transition>,将需要执行动画的元素包裹在该组件中,在通过css修改样式即可满足需求
命名该动画的样式使用 .v-enter等过渡类名来定义动画 如<transition name="tr"></transition> 的类名为 .tr-enter
vue一共提供了6个过渡类名,官方文档的解释有一些拗口,我决定以点击显示底部弹框为例解释6个类名的状态

  1. v-enter: 弹框显示前的样式,过渡的开始状态, 也就是动画还没开始前,动画的起始位置
  2. v-enter-active 动画生效的状态,从底部过渡到页面的过程
  3. v-enter-to 动画执行完的结束状态,也就是弹出结束后显示在页面的样式
  4. v-leave 隐藏元素,离开动画的开始状态,元素消失开始的样式
  5. v-leave-active 隐藏元素过程中,离开动画的生效动态即离开的过程,从上到下滑
  6. v-leave-to 隐藏元素完成,离开动画的结束状态(此时v-leave的样式被删除)

用通俗的语句解释完6个状态后开始书写样式,将点击显示/点击隐藏 两个动作分解


// 点击显示弹窗的动画
// 弹框出现前的样式
.slide-enter{
transform: translate3d(0,100%,0)
}
// 从下往上弹出的过程,即过渡效果的样式
.slide-enter-active{
transition:all 0.5s
}
// 弹框弹出的动画结束,即显示在页面底部
.slide-enter-to{
transform: translate3d(0,0,0)
}
// 点击隐藏弹框的动画
// 弹框隐藏前的样式,此时在页面底部
.slide-leave{
transform: translate3d(0,100%,0)
}
// 弹框从上往下滑的过渡效果
.slide-leave-active{
transition:all 0.5s
}
// 弹框滑出页面底部即隐藏:这一步骤的样式可以忽略不写,因为在slide-leave-to这个状态时v-leave的样式已经被删除 v-show为false弹框隐藏,弹框隐藏的样式
.slide-leave-to{
transform: translate3d(0,100%,0)
}

有时候过渡元素时需要条件渲染,如果渲染的两个标签是相同的,需要用key唯一值来区别。代码如下


&lt;transition&gt;
&lt;div&gt;
&lt;button v-if="flag" :key="submit"&gt;submit&lt;/button&gt;
&lt;button v-else :key="cancel"&gt;cancel&lt;/button&gt;
&lt;/div&gt;
&lt;/transition&gt;

假如在这个基础下增加一个需求,先隐藏submit按钮再显示cancel,即离开和开始的动画同时进行。可以使用过渡模式来解决问题。
mode="out-in" 当前元素先进行过渡,过渡结束后新元素再进行过渡
mode="in-out" 新元素先进行过渡,过渡结束当前元素再过渡

过渡列表

除了单个标签过渡外,在实际开发中肯定还会涉及到列表过渡。例如往一个列表添加或删除一条数据。
例如下图,动态添加或删除一个数组中的数字,插入的数字和原有的都要有一个过渡的动画。在这种情况下需要使用<transition-group><transition-group>过渡组件,具体代码如下

组件的结构如下


&lt;template&gt;
&lt;div class="number-wrapper"&gt;
&lt;button @click="add"&gt;add&lt;/button&gt;
&lt;button @click="remove"&gt;remove&lt;/button&gt;
&lt;div class="list"&gt;
&lt;transition-group name="fade"&gt;
//注意,在transition-group下:key的值不能够是index
&lt;span v-for="(item) in list" :key="item" class="item"&gt;{{item}}&lt;/span&gt;
&lt;/transition-group&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/template&gt;

js代码


&lt;script&gt;
export default {
data () {
return {
list: [1]
}
},
methods: {
add () {
// 获取当前数组长度
let num = this.list.length
// 获取随机位置
let index = Math.floor(Math.random() * num)
// 添加下一个数字到随机位置
this.list.splice(index, 0, num + 1)
},
remove () {
let num = this.list.length
let index = Math.floor(Math.random() * num)
//随机移除一个数字
this.list.splice(index, 1)
}
}
}
&lt;/script&gt;

css部分


.fade-enter,
.fade-leave-to
opacity:0
transform:translateY(20px)
.fade-leave-active
position: absolute
.item
margin-right: 10px
display: inline-block
transition: all 0.5s

来源:https://segmentfault.com/a/1190000017543505

vue.js之过渡动画的更多相关文章

  1. Vue.js 之 过渡动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 058_末晨曦Vue技术_过渡 & 动画之过渡的类名

    进入/离开 & 列表过渡 点击打开视频讲解更加详细 概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class ...

  3. VUE笔记 - 列表过渡动画 v-enter, v-leave-to | v-enter-active, v-leave-active | v-move

    本例要结合过渡动画四个过程的示意图一起理解. https://cn.vuejs.org/v2/guide/transitions.html 疑问: v-for="(item,i) in li ...

  4. Vue - 解决路由过渡动画抖动问题

    前言 Vue-Router 作为 Vue 的核心模块,它为我们提供了基于组件的路由配置.路由参数等功能,让单页面应用变得更易于管理.良好的路由管理尤为重要,比如路由拦截.路由懒加载.路由权限等都在开发 ...

  5. 066_末晨曦Vue技术_过渡 & 动画之多个元素的过渡

    多个元素的过渡 点击打开视频讲解更加详细 我们之后讨论多个组件的过渡,对于原生标签可以使用 v-if/v-else.最常见的多标签过渡是一个列表和描述这个列表为空消息的元素: <transiti ...

  6. Vue.js 第3章 axios&Vue过渡动画

    promise 它将我们从回调地狱中解脱出来 创建和使用 var fs = require('fs') // 创建promise // reslove表示执行成功后调用的回调函数 // reject表 ...

  7. 初步学习vue.js

    vue是法语中视图的意思,Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API. 响应的数据绑定 Vue.js 的核心是一个响应的数据绑定系统,它让数据与 DOM 保持同 ...

  8. Vue.js 系列教程 5:动画

    原文:intro-to-vue-5-animations 译者:nzbin 译者的话:经过两周的努力,终于完成了这个系列的翻译,由于时间因素及个人水平有限,并没有详细的校对,其中仍然有很多不易理解的地 ...

  9. Vue.js动画在项目使用的两个示例

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 李萌,16年毕业,Web前端开发从业者,目前就职于腾讯,喜欢node.js.vue.js等技术,热爱新技术,热 ...

随机推荐

  1. Generalizing from a Few Examples: A Survey on Few-Shot Learning(从几个例子总结经验:少样本学习综述)

    摘要:人工智能在数据密集型应用中取得了成功,但它缺乏从有限的示例中学习的能力.为了解决这一问题,提出了少镜头学习(FSL).利用先验知识,可以快速地从有限监督经验的新任务中归纳出来.为了全面了解FSL ...

  2. python模块turtle简单用法

    ##初始化turtle:t = turtle.Turtle() 或者 t = turtle.Pen()##查询turtle状态#位置t.position() #箭头朝向,箭头朝向按照顺时针或者逆时针偏 ...

  3. 二分mid的取法

    二分的两种形式: 1.范围缩小时,r = mid,l = mid + 1,取中间值时,mid = (l + r) >> 1. 2.范围缩小时,l = mid,r = mid - 1,取中间 ...

  4. sqli-libs(2)

    Lesson2:数字型注入我们先来测试一下 http://127.0.0.1/sql1/Less-2/?id=1%20and%201=1 发现未报错 这里知道我们的数字型注入是不需要 进行单引号闭合的 ...

  5. Android学习_7/24

    一.           活动的生命周期 1.        活动状态 运行:位于返回栈栈顶 暂停:不在栈顶,但仍可见 停止:不在栈顶,完全不可见 销毁:从栈中移除 2.        活动的生存期 ...

  6. yue

    1. 字节流与二进制文件 1.我的代码 public class Student { private int id; private String name; private int age; pri ...

  7. JS闭包的理解及常见应用场景

    JS闭包的理解及常见应用场景 一.总结 一句话总结: 闭包是指有权访问另一个函数作用域中的变量的函数 1.如何从外部读取函数内部的变量,为什么? 闭包:f2可以读取f1中的变量,只要把f2作为返回值, ...

  8. 【Linux】GDB用法详解(5小时快速教程)

    GDB是一个强大的命令行调试工具.虽然X Window提供了GDB的图形版DDD,但是我仍然更钟爱在命令行模式下使用GDB.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本. UNIX下的软 ...

  9. 浏览器端-W3School-HTML:HTML DOM Script 对象

    ylbtech-浏览器端-W3School-HTML:HTML DOM Script 对象 1.返回顶部 1. HTML DOM Script 对象 Script 对象 Script 对象表示 HTM ...

  10. zk 两阶段提交(待完善)

    zk 节点是一个 QuorumPeer,选举结束后,leader 和 follower 各自执行自己的逻辑: org.apache.zookeeper.server.quorum.QuorumPeer ...