美文网首页
Vue.js 过渡动画

Vue.js 过渡动画

作者: 壹点微尘 | 来源:发表于2017-09-06 22:55 被阅读2680次
动画的阶段
具体请参考文档
https://cn.vuejs.org/v2/guide/transitions.html

1. css实现过度

  • transition 动画
<template>
  <div>
    <button @click="show = !show">Toggle</button>
    <div class="ab">
      <transition name="adc">
        <p v-show="show">I am show</p>
      </transition>
    </div>
  </div>
</template>

<script>
  export default {
    data () {
      return {
        show: true
      }
    }
  }
</script>

<style>
 .adc-enter-active, .adc-leave-active {
   transition: all 2s ease-out;
 }
  .adc-enter, .adc-leave-to {
    opacity: 0;
  }
</style>
css改变透明度动画
  • css-transform动画
<template>
  <div>
    <button @click="show = !show">Toggle</button>
    <div class="ab">
      <transition name="my-trans">
        <p v-show="show">I am show</p>
      </transition>
    </div>
  </div>
</template>

<script>
  export default {
    data () {
      return {
        show: true
      }
    }
  }
</script>

<style>
  .my-trans-enter-active, .my-trans-leave-active {
    transition: all .5s ease-out;
  }
  .my-trans-enter {
    transform: translateY(-100px);
    opacity: 0;
  }
  .my-trans-leave-active {
    transform: translateY(100px);
  }
</style>
css-transform动画
  • 动态组件
<template>
  <div>
    <button @click="onToggle">Toggle</button>
    <div class="ab">
      <transition name="fade">
        //动态组件
        <div :is="componentView"></div>
      </transition>
    </div>
  </div>
</template>

<script>
  import comA from './components/a.vue'
  import comB from './components/b.vue'
  export default {
    components: {comA, comB},
    data () {
      return {
        componentView: 'com-a'
      }
    },
    methods: {
      onToggle () {
        if (this.componentView === 'com-a') {
          this.componentView = 'com-b'
        } else {
          this.componentView = 'com-a'
        }
      }
    }
  }
</script>

<style>
 .fade-enter-active, .fade-leave-active {
   transition: all 2s ease-out;
 }
  .fade-enter, .fade-leave-to {
    opacity: 0;
  }
</style>
动态组件,mode为默认
同时生效的进入和离开的过渡不能满足所有要求,所以 Vue 提供了 过渡模式
in-out: 新元素先进行过渡,完成之后当前元素过渡离开。
out-in: 当前元素先进行过渡,完成之后新元素过渡进入。
默认情况下是in-out

上述动画,如果设置mode="out-in"

<transition name="fade" mode="out-in">
   <div :is="componentView"></div>
</transition>

实现效果为:

mode="out-in"

注意:如果两个标签名相同,是不会执行动画的,若想执行动画,需要给标签设置不同的key来加以区分

<template>
  <div>
    <button @click="show = !show">Toggle</button>
    <div class="ab">
      <transition name="fade" mode="out-in">
        <p v-if="show" >i am show</p>
        <p v-else >not in show</p>
      </transition>
    </div>
  </div>
</template>

动画效果为:


两个标签名相同的动画,未设置不同的key
如果设置了不同的key,就可以执行动画了
<template>
  <div>
    <button @click="show = !show">Toggle</button>
    <div class="ab">
      <transition name="fade" mode="out-in">
        //设置不同的key
        <p v-if="show" key="1">i am show</p>
        <p v-else key="2">not in show</p>
      </transition>
    </div>
  </div>
</template>
两个标签名相同的动画,设置不同的key

2. js实现过渡

具体看官方教程,写的比较详细 JavaScript 钩子
Vue.js中引入jQuery教程:http://www.cnblogs.com/Yann001/p/6850698.html

<template>
  <div>
    <button @click="show = !show">Toggle</button>
    <div class="ab">
      <transition
        @before-enter="beforeEnter"
        @enter="enter"
        @leave="leave"
        :css="false"
      >
        <p class="animate-p" v-show="show">i am show</p>
      </transition>
    </div>
  </div>
</template>

<script>
  import comA from './components/a.vue'
  import comB from './components/b.vue'
  export default {
    components: {comA, comB},
    data () {
      return {
        show: true
      }
    },
    methods: {
//      动画执行的起始位置
      beforeEnter: function (el) {
        $(el).css({
          left: '50px',
          opacity: 0
        })
      },
      enter: function (el, done) {
        $(el).animate({
          left: '200px',
          opacity: 1
        }, {
          duration: 1500,
          complete: done
        })
      },
      leave: function (el, done) {
        $(el).animate({
          left: '500px',
          opacity: 0
        }, {
          duration: 1500,
          complete: done
        })
      }
    }
  }
</script>

<style>

.animate-p {
  position: absolute;
  top: 100px;
  left: 0;
}
</style>

当让标签隐藏时,执行的是leave动画;
当让标签显示时,执行的是beforeEnter,enter动画

js过渡动画
  • 在学习饿了么外卖app时,发现这样写也可以,
    给要执行动画的标签添加transition
<div v-show="detailShow" class="detail" transition="fade">

在CSS代码中

    .detail
      ......
      &.fade-transition
        opacity: 1
        background: rgba(7, 17, 27, 0.8)
      &.fade-enter,&.fade-leave
        opacity: 0
        background: rgba(7, 17, 27, 0)

这样就可以简单的实现一个背景透明度过度的动画

相关文章

  • Vue.js 过渡动画

    1. css实现过度 transition 动画 css-transform动画 动态组件 上述动画,如果设置mo...

  • Vue.js动画过渡

    该页面内容均来自vue.js官网(https://cn.vuejs.org/v2/guide/transition...

  • JS中的动画事件和过渡事件

    动画事件 动画事件demo 过渡动画事件 过渡动画事件demo

  • CSS3过渡动画

    过渡动画 transition属性简介transition是网页上的过渡动画,变化的逐渐过渡效果,简称过渡动画!列...

  • 过渡与动画

    @(HTML5)[过渡, 动画] [TOC] 五、过渡与动画 过渡 transition-property:过渡属...

  • 动画core animation

    type 动画过渡类型subtype 动画过渡方向

  • Android过渡动画Scene and Transition(

    Android场景过渡——Scene and Transition(一) 场景过渡动画 场景过渡动画是指以动画的形...

  • 016 过渡及动画

    过渡与动画 一、过渡 1、过渡属性 二、动画 1、动画属性 2、动画体 v_hint:动画属性设置给指定选择器标签...

  • CSS3--动画

    特点 过渡和动画之间的相同点过渡和动画都是用来给元素添加动画的过渡和动画都是系统新增的一些属性过渡和动画都需要满足...

  • CSS3动画

    css3动画包括过渡,形变,动画 过渡transition: 指定过渡样式:transition-property...

网友评论

      本文标题:Vue.js 过渡动画

      本文链接:https://www.haomeiwen.com/subject/dxzvjxtx.html