vue.js之过渡动画

Dart
• 阅读 4364

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

  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唯一值来区别。代码如下

<transition>
    <div>
        <button v-if="flag" :key="submit">submit</button>
        <button v-else :key="cancel">cancel</button>    
    </div>    
</transition>

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

过渡列表

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

组件的结构如下

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

js代码

<script>
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)
    }
  }
}
</script>

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
点赞
收藏
评论区
推荐文章
LinMeng LinMeng
4年前
过渡的动画遮罩层
亲启敬呈亲爱的insuredName||""客户countexportdefaultname:"BenefitTransform",data()returnanimate
徐小夕 徐小夕
5年前
如何使用css3实现一个类在线直播的队列动画
之前在群里有个朋友问了这样一个问题,就是如何在小程序中实现类似直播平台的用户上线时的队列动画?作为一名前端工程师,解决方案无非以下2种:1.使用javascript根据条件来控制元素的样式实现队列动画2.用纯css3配合数据驱动模型来实现.大家都知道在现代的Web开发中,我们能使用Css实现的效果尽量不要用Js,所以我们应该优先考虑用C
Chase620 Chase620
5年前
CSS3动画之逐帧动画
CSS3动画开发指南第二弹,剥丝抽茧为你解析逐帧动画,同时放送从实战经验中总结出来的逐帧动画使用技巧。什么是逐帧动画要了解CSS3逐帧动画,首先要明确什么是逐帧动画。看一下维基百科中的定义:定格动画,又名逐帧动画,是一种动画技术,其原理即将每帧不同的图像连续播放,从而产生动画效果。简而言之,实现逐帧动画需要两个条件:(1)相关联
Wesley13 Wesley13
4年前
Unity中Animator的2DSprite动画控制与使用
关于Unity动画系统几个名词概念,需要了解一下:Animator:动画控制器,控制Mecanim动画系统的接口。Animation:animation组件用于播放动画AnimationClip:动画剪辑片段,储存基于关键帧的动画,是用于Animation来播放动画。Animation编辑面板:此面板可以进行动画的调整,crtl6打开ani
Stella981 Stella981
4年前
Android 动画和图形概述
Android提供了非常多强大的API来为UI元素应用动画,及绘制定制的2D和3D图形。下面的部分提供了一个APIs和可用的系统功能的概述,并帮助你确定,对于你的需求而言,哪种方法是最好的。动画Androidframework提供了两种动画系统:属性动画(在Android3.0中引入)和view动画。两种动画系统都是可行的选择,但通常而言
Wesley13 Wesley13
4年前
View动画和Drawable动画
View动画你可以使用view动画系统执行Views的补间动画。补间动画通过诸如起始点,终止点,大小,旋转,和一个动画其他通用的aspects等信息来计算动画。一个补间动画可以在一个View对象的内容上执行一系列简单的变换(位置,大小,旋转,透明度)。因此,如果你有一个TextView(https://www.oschina.net
Stella981 Stella981
4年前
Css3 Animation 动画十二原则
前言本文主要介绍了CSS3动画基本原理和常用形式作为前端的设计师和工程师,我们用CSS去做样式、定位并创建出好看的网站。我们经常用CSS去添加页面的运动过渡效果甚至动画,但我们经常做的不过如此。动效是一个有助于访客和用户理解我们设计的强有力工具。这里有些原则能最大限度地应用在我们的工作中。迪士尼经过基础工作练习的长时间
Stella981 Stella981
4年前
Android Property Animation
属性动画系统是一个健壮的框架,它使你几乎能够将任何东西做成动画。你可以定义一个动画来随着时间改变任何对象属性,而不管它是否会被绘制到屏幕上。一个属性动画在一个特定的时间长度中改变一个属性的值(一个对象中的一个成员)。当这个属性会影响到屏幕上绘制的组件时,也就产生了我们看得到的那类动画了。要动画化一些东西,你可以指定你想要动画化的对象属性,比如一个对象在屏幕上
Wesley13 Wesley13
4年前
Unity 2D游戏开发教程之使用脚本实现游戏逻辑
Unity2D游戏开发教程之使用脚本实现游戏逻辑使用脚本实现游戏逻辑通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态。但是这其中还有一些问题。例如,我们无法使用键盘控制精灵当前要进入的动画状态,而且精
小万哥 小万哥
1年前
资源描述框架的用途及实际应用解析
RDF(资源描述框架)是一种用于机器理解网络资源的框架,使用XML编写。它通过URI标识资源,用属性描述资源,便于计算机应用程序处理信息。RDF在语义网上促进信息的确切含义和自动处理,使得网络信息可被整合。RDF语句由资源、属性和属性值组成。RDF文档包括&lt;rdf:RDF&gt;根元素和&lt;rdf:Description&gt;元素,后者用about属性标识资源。RDF还支持容器(如&lt;Bag&gt;、&lt;Seq&gt;和&lt;Alt&gt;)来描述集合。RDFS是RDF的扩展,提供描述类和属性的框架,而达布林核心是一组预定义属性,用于描述文档。
Dart
Dart
Lv1
九月九日眺山川,归心归望积风烟。
文章
4
粉丝
0
获赞
0