vuew 2.0动画

动画(过渡)

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


1. 单组件/元素过渡

  • 过渡的类名

会有 4 个(CSS)类名在 enter/leave 的过渡中切换

  1. v-enter: 定义进入过渡的开始状态。在元素被插入时生效,在下一个帧移除。
  2. v-enter-active: 定义进入过渡的结束状态。在元素被插入时生效,在 transition/animation 完成之后移除。
  3. v-leave: 定义离开过渡的开始状态。在离开过渡被触发时生效,在下一个帧移除。
  4. v-leave-active: 定义离开过渡的结束状态。在离开过渡被触发时生效,在 transition/animation 完成之后移除。
image
.box {
    width: 300px;
    height: 300px;
    background: red;
}

.fade-enter-active,
.fade-leave-active {
    transition: all 2s ease;
}

.fade-enter-active  { /*变化成什么样, 显示的过程 */
    width: 300px;
    height: 300px;
    opacity: 1;
}

.fade-enter {  /* 显示前的状态 */
    width: 100px;
    height: 100px;
    opacity: 0;
}

.fade-leave { /* 消失前的状态 */
    width: 300px;
    height: 300px;
    opacity: 1; 
}

.fade-leave-active { /*变化成什么样, 消失的过程 */
    width: 100px;
    height: 100px;
    opacity: 0; 
}

<div id="app">
        <button @click="toggle">点击显示隐藏</button>
        <transition name="fade">
            <div class="box" v-show="show"></div>
        </transition>
</div>

new Vue({
    el: '#app',
    data: {
        show: false
    },
    methods: {
        toggle: function() {
            this.show = !this.show;
        }
    }
});
  • 自定义过渡类名

我们可以通过以下特性来自定义过渡类名:

  • 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="stylesheet" type="text/css">
<div id="example-3">
  <button @click="show = !show">
    Toggle render
  </button>
  <transition
    name="custom-classes-transition"
    enter-active-class="animated bounceInLeft"
    leave-active-class="animated bounceOutRight"
  >
    <p v-if="show">hello</p>
  </transition>
</div>

new Vue({
  el: '#example-3',
  data: {
    show: true
  }
})

  • 回调事件
<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) {
    // ...
  }
}

当只用 JavaScript 过渡的时候, 在 enter 和 leave 中,回调函数 done 是必须的 。 否则,它们会被同步调用,过渡会立即完成。

推荐对于仅使用 JavaScript 过渡的元素添加 v-bind:css="false",Vue 会跳过 CSS 的检测。这也可以避免过渡过程中 CSS 的影响。

  • 过渡模式
    • in-out: 新元素先进行过渡,完成之后当前元素过渡离开。
    • out-in: 当前元素先进行过渡,完成之后新元素过渡进入。

2. 列表过渡

渲染整个列表,比如使用 v-for ?在这种场景中,使用 <transition-group> 组件

  1. 不同于 <transition>, 它会以一个真实元素呈现:默认为一个 <span>。你也可以通过 tag 特性更换为其他元素。
  2. 内部元素 总是需要 提供唯一的 key 属性值
  • 列表的进入和离开过渡
    与单个组件/元素一样
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,200评论 0 29
  • 概述 Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。包括以下工具: 在 CSS 过渡和...
    寒梁沐月阅读 1,483评论 0 3
  • Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。包括以下工具: 1. 在 CSS ...
    ningluo阅读 433评论 0 0
  • 本文为转载,原文:Vue学习笔记进阶篇——单元素过度 概述 Vue 在插入、更新或者移除 DOM 时,提供多种不同...
    ChainZhang阅读 744评论 0 0
  • 咱们结婚吧,第一次看没看完,过去了半年多了,今天又看一遍,看完了。流了很多泪,不知道第一次如果也看完的话是不是也流...
    跌跌撞撞还傻笑阅读 351评论 0 0

友情链接更多精彩内容