Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。
包括以下几种常见的方式:

    • 在 CSS 过渡和动画中自动应用 class
    • 可以配合使用第三方 CSS 动画库,如 Animate.css
    • 在过渡钩子函数中使用 JavaScript 直接操作 DOM

附上官方的动画状态图:

说明:

  1. v-enter:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。

  2. v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。

  3. v-enter-to: 2.1.8版及以上 定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成之后移除。

  4. v-leave: 定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。

  5. v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。

  6. v-leave-to: 2.1.8版及以上 定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画完成之后移除。

一、使用css过渡动画

css部分:

     <style>
/* v-enter 一个时间点,进入之前,元素其实状态,此时还没有进入 */
/* v-leave-to 时间点,动画离开之后,离开的种子状态,此时元素动画已经结束 */
.v-enter,
.v-leave-to
{
opacity:;
transform: translateX(150px)
}
/* v-enter-active 入场动画时间段 */
/* v-leave-active 离场动画时间段 */
.v-enter-active,
.v-leave-active{
/* 让动画有个过渡的渐变效果 */
transition:all 0.4s ease;
}

HTML部分:

     <div id="app">
<button type="button" @click="flag=!flag">切换</button> <!-- 1.使用transition标签包裹需要被动画控制得元素,vue提供 -->
<transition>
<p v-if="flag">这是个p标签</p>
</transition>
</div>

JS部分:

     var app = new Vue({
el: "#app",
data() {
return {
message: 'hello!',
flag: false,
}
},
methods: {
sayHi() {
console.log("hello");
}
}
});

当然还可以自定义v-前缀,默认使用的是vue内置的类来控制transition标签的动画。

CSS部分:

    /* 在 transition 标签中加个 name='my' 属性,可局部自定义动画 */
.my-enter,
.my-leave-to
{
opacity:;
transform: translateY(300px)
} .my-enter-active,
.my-leave-active{
/* 让动画有个过渡的渐变效果 */
transition:all 0.4s ease;
}

HTML部分:

     <button type="button" @click="flag2=!flag2">切换2</button>

     <!-- 1.使用transition标签包裹需要被动画控制得元素,vue提供,加了个 name='my' -->
<transition name="my">
<p v-if="flag2">这是个p2标签</p>
</transition>

二、使用第三方css动画库实现

引入第三方动画库

  <link rel="stylesheet" href="../lib/animate.css">

css部分不用自定义了..

HTML部分:

     <button type="button" @click="flag=!flag">切换</button>

     <!-- 使用 :duration="毫秒值" 来控制进场和离场的时长 -->
<transition
enter-active-class="bounceIn"
leave-active-class="bounceOut"
:duration="{enter:200,leave:400}">
<p v-if="flag" class="animated">这是个p2标签</p>
</transition>

JS部分:

     var app = new Vue({
el: "#app",
data() {
return {
message: 'hello!',
flag: false,
flag2: false
}
},
methods: {
sayHi() {
console.log("hello");
}
}
});

四、使用js钩子函数实现

需求:点击  【切换】 按钮,一个黄色的小球会从(0,0)位置移动到(150px,450px)位置中去然后消失。

CSS部分:

     <style>
.ball{
width:30px;
height:30px;
border-radius: 50%;
background-color: yellow;
}
</style>

HTML部分:

     <div id="app">
<button type="button" @click="flag=!flag">切换</button> <transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter">
<div v-if="flag" class="ball"></div>
</transition>
</div>

JS部分:

     var app = new Vue({
el: "#app",
data() {
return {
flag: false,
}
},
methods: {
beforeEnter(el) {
console.log("beforeEnter")
el.style.transform = "translate(0,0)";
},
enter(el, done) { console.log("enter")
// 强制动画的使用
el.offsetWidth
el.style.transform = "translate(150px,450px)"
el.style.transition = "all 1s ease" // 这个done就是afterEnter的函数引用
done()
},
afterEnter(el) {
console.log("afterEnter")
this.flag = !this.flag;
}
}
});

vue 动画的更多相关文章

  1. vue动画的用法

    vue动画 在vue.js中有两种写动画的方法,第一种就是像js里一样,用原生代码来实现,第二种则是使用animate.css的动画类文件,这个动画类和bootstrap.css文件类似,直接调用类就 ...

  2. vue动画及其原理

    1,vue动画的实现原理,主要是通过在不同时期给需要动画的dom元素加上css动画样式 我们以显示和隐藏动画为例 a, 需要动画的dom元素 b,点击时vue控制往vue中加的样式 2,  我们以两张 ...

  3. vue教程3-02 vue动画

    vue教程3-02 vue动画 以下代码,已经用包管理器下载好vue,animate <!DOCTYPE html> <html lang="en"> &l ...

  4. vue动画实现方式

    vue动画实现方式 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&q ...

  5. vue动画理解,进入、离开、列表过度和路由切换。

    vue的动画对于很多初学者,甚至对很多老鸟来说也是很费劲,不容易控制的. 这篇文章讲vue动画的理解.其实没那么难. 动画理解 一个元素从A状态变成B状态,如果这个过程通过某种方式反应在视图上了,那么 ...

  6. Vue动画操作

    概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animate.c ...

  7. vue 动画原理 part1

    Vue动画原理 增加和删除css增加样式实现一个过渡效果也就是动画效果 1.需要动画效果的标签外包裹一个transition标签 会被自动分析css样式,然后自动构建一个动画流程 transition ...

  8. Javascript - Vue - 动画

    动画状态类名 vue动画通过将需要执行动画的标签放入transition标签中,再通过设置预置的vue动画类名的css样式来控制动画的呈现效果. 开场动画状态的三个类名 v-enter:动画开始之前的 ...

  9. 15.vue动画& vuex

    Vue.config.productionTip = false; ==是否显示提示信息== ==import/export== export xxx 必须跟跟对象或者和定义一起 对象: export ...

  10. vue动画

    最近想搞搞vue的过渡和动画,以为照着官网写就好了,谁知道还是出现一些状况 具体表现就是不用webpack打包时候写的过渡是正常的,而用了webpack打包就不正常了 说使用了未定义的element: ...

随机推荐

  1. 20145203盖泽双实验一 Java开发环境的熟悉(Linux + Eclipse)

    实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没 ...

  2. mysql通过“延迟关联”进行limit分页查询优化的一个实例

    最近在生产上遇见一个分页查询特别慢的问题,数据量大概有200万的样子,翻到最后一页性能很低,差不多得有4秒的样子才能出来整个页面,需要进行查询优化. 第一步,找到执行慢的sql,如下: SELECT  ...

  3. mybatis提取<where><if>共用代码

    mybatis项目dao层中很多sql语句都会拥有某些相同的查询条件,以<where><if test=""></if></where&g ...

  4. HDU2546(01背包加一点点变形)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2546 饭卡 Time Limit: 5000/1000 MS (Java/Others)    Me ...

  5. EF 解除属性映射到数据库中 NotMappedAttribute无效解决办法

    可以通过NotMappedAttribute标记模型某个属性可以使该属性不必映射到数据库. public class Unicorn { public int Id { get; set; } [No ...

  6. 在线扫描PDF JPG 图片上面文字

    在线扫描PDF JPG 图片上面文字

  7. uniapp开发踩坑记录

    数组绑定class的问题 版本:v1.5.4 自定义了一个icon的组件,部分代码如下 <template> <text :class="[name, icon]" ...

  8. hadoop环境搭建-伪分布模式

    Appache hadoop 版本:2.77   jdk:1.8  系统:centos7 注意不要在root下解压,要单独建一个用户安装hadoop及其组件. 一.先查看系统是否有自带j #dk: r ...

  9. Bugku Writeup —文件上传2(湖湘杯)

    我们先来看下题目,题目说明是文件上传 我们可以尝试通过构造payload来进行测试 php://filter/read=convert.base64-encode/resource=flag 获取到f ...

  10. VS2010调试和头文件路径设置

    1:VS2010 release 调试C/C++ -> 常规 -> 调试信息格式, 修改为程序数据库(/Zi)C/C++ ->优化 -> 优化,修改为已禁用(/Od)链接器 - ...