Vue中的动画效果

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

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

下面分别从这个4个工具来学习Vue动画效果。

一、单元素/组件的过渡

Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡

  • 条件渲染 (使用 v-if)
  • 条件展示 (使用 v-show)
  • 动态组件
  • 组件根节点

一个典型的例子:

Html文件

<div id="app">
        <transition name="fade">
            <div v-if="show">
                Hello world.
            </div>
        </transition>
        <button @click="handleClick">切换</button>
    </div>

  

js文件

<script>

        // 1. 创建Vue的实例
        let vm = new Vue({
            el:‘#app‘,
            data:{
                show:false
            },
            methods:{
                handleClick:function(){
                    this.show = !this.show
                }
            }
        });
    </script>

  

css文件

<style>
        .fade-enter-active, .fade-leave-active {
          transition: opacity 2s;
        }
        .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
          opacity: 0;
        }
</style>

  

这个例子的效果为:点击切换,文字会淡入淡出。

实现原理:

1、通过使用transition组件后, Vue 将会做以下处理:

  • 自动嗅探目标元素是否应用了 CSS 过渡或动画,如果是,在恰当的时机添加/删除 CSS 类名。
  • 如果过渡组件提供了 JavaScript 钩子函数,这些钩子函数将在恰当的时机被调用。
  • 如果没有找到 JavaScript 钩子并且也没有检测到 CSS 过渡/动画,DOM 操作 (插入/删除) 在下一帧中立即执行。(注意:此指浏览器逐帧动画机制,和 Vue 的 nextTick 概念不同)

2、动画进入时,Vue会添加CSS类,如果没有使用name="fade"的话,类名为v-fade-enter、v-fade-eneter-active等。

第一帧动画,会自动添加fade-enter和fade-enter-active类

第二帧动画,会去掉fade-enter类,添加fade-enter-to类

第三帧动画,会去掉所有enter类

3、动画在离开时同样会添加或删除CSS类

二、Vue使用animate.css动画库

1、使用自定义类

效果为:进入或离开都会有拉升效果。

注意:这里我们使用了

name="bounce"替换了默认的fade。当然,如果没有fade的话,也会有v-作为默认开头。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>

        @keyframes bounce-in {
          0% {
            transform: scale(0);
          }
          50% {
            transform: scale(1.5);
          }
          100% {
            transform: scale(1);
          }
        }

        .bounce-enter-active {
          animation: bounce-in .5s;
        }
        .bounce-leave-active {
          animation: bounce-in .5s reverse;
        }
</style>

</head>
<body>
    <div id="app">
        <transition name="bounce">
            <div v-if="show">
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris facilisis enim libero, at lacinia diam fermentum id. Pellentesque habitant morbi tristique senectus et netus.
            </div>
        </transition>
        <button @click="handleClick">切换</button>
    </div>

    <script src="js/vue.js"></script>
    <script>

        // 1. 创建Vue的实例
        let vm = new Vue({
            el:‘#app‘,
            data:{
                show:false
            },
            methods:{
                handleClick:function(){
                    this.show = !this.show
                }
            }
        });
    </script>
    </body>
    </html>

  我们这里还可以使用自定义类:

既然我们可以使用自定义class,那么我们就可以使用开源的第三方CSS库,比如animate.css库。

https://daneden.github.io/animate.css/

使用很简单,直接替换上面我们自定义的class就行。

使用animate.css注意事项:

1、必须使用自定义class的模式

enter-active-class=""

2、animated类放在前面,且是必须的

三、Vue中同时使用过渡和动画

1、初次动画效果

上面例子中,我们初次进入的时候没有动画效果,我们可以做如下修改:

2、如果我们希望在上面的例子中还加入一开始我们说的过渡效果,那该怎么做呢?

1、因为animate.css有一个自己的动画效果时长,fade也有一个opacity,那么以哪一个为准呢?我们可以使用type="transition"来确定哪个为准。

2、我们也可以自己设定动画效果时长样式:duration里面的enter为进入时长,leave为动画离开时长,都是针对过渡效果的。

四、Vue中的js动画配合使用第三方 JavaScript 动画库(Velocity.js)

原文地址:https://www.cnblogs.com/skyflask/p/10990482.html

时间: 2024-10-07 23:18:41

Vue中的动画效果的相关文章

Vue 中的动画特效

Vue 中的动画特效 CSS 实现标签显隐 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-U

CSS3中的动画效果记录

今天要记录的是CSS3中的三种属性transform.transition以及animation,这三个属性大大提升了css处理动画的能力. 一.Transform 变形 CSS中transform 属性允许你修改CSS可视化模型的坐标控件.使用transform,元素可以安装设定的值变形.旋转.缩放.倾斜. 语法: transform : none | <transform-function> [ <transform-function> ]* 也就是: transform: r

05.vue中js动画与Velocity.js的结合

vue中js动画 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue中js动画</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head>

vue中css动画原理

显示原理: <transition name='fade'> <div v-if='show'>hello world</div> </transition> 当一个元素被transition包裹了之后,vue会自动当分析元素的css样式,然后构建一个动画的流程,在动画即将被执行的一瞬间,vue会在内部标签上增加两个class名字,分别是fade-enter,fade-enter-active,在动画执行到第二帧的时候,也就是动画开始后,fade-enter

angular中的动画效果

用angular来形成动画效果的代码如下 <!DOCTYPE html> <html lang="en" ng-app="app"> <head> <meta charset="UTF-8"> <title></title> <style> .box { width: 100px; height: 100px; background: red; } </st

JQuery中的动画效果

JQUERY DAY03: * 动画效果 * 显示与隐藏 * show() - 显示 * 无参版本 - 不具有动画效果 * show(speed,callback)有参版本 - 具有动画效果 * speed - 设置动画执行的时长,单位为毫秒 * 三个预定义值 - slow|normal|fast * callback - 当动画执行完毕后执行的函数 * hide() - 隐藏 * 无参版本 - 不具有动画效果 * hide(speed,callback)有参版本 - 具有动画效果 * spee

CSS3中的动画效果-------Day72

还记得么,在前面也曾实现过"仅仅用css让div动起来",还记得当时是怎么实现的么,是的,transition,针对的也比較局限,仅仅有旋转角度啊,长宽啊之类的,所以说,与其说是动起来,倒真不如说成是过渡.当然它另一个局限性,仅仅有当鼠标放上后才干够触发,仅仅是一个样式变成另一个样式,变化也比較单调,而真正的实现动画效果,css3中另一个很有效的方法:@keyframes. 首先.要知道它的规范和使用方法 还记得transition的使用方法么:在初始的样式中增加div{transit

css3实现的3中loading动画效果

一.css3中animation动画各种属性详解: animation Value:     [<animation-name> || <animation-duration> || <animation-timing-function> || <animation-delay> || <animation-iteration-count> || <animation-direction> || <animation-fill-

iOS中关于动画效果的要点

在系统并深入学习iOS动画的过程中,不得不说是个痛苦的过程.没有任何书系统的讲解这方面的知识,网上的文章都讲的支离破碎:很幸运的看到了http://objccn.io这个网站:即使如此,还是花了三天时间:这个是对整体概念模糊到不断清晰,再逐步理顺,最后总结归纳为几个关键点.我想这辈子应该都忘记不了了. iOS上的动画效果绝对赞:最常见的uitable动态效果,当手指在屏幕上下滑动时,列表会跟随其一起上下活动:如果猛的往上一推,还可以看到列表的惯性作用下,还会不断滚动,同时慢慢减速.这个过程根本不