transition过渡&动画

2022-12-21 20:28:30 浏览数 (1)

# transition过渡&动画

API (opens new window)

# 使用

需要设置动画的元素或组件要在外边包裹一个<transition>标签,设置自定义的name,vue会根据元素的切换(进入/离开)过程添加相应的css类名,你可以自由地使用css类名来设置css过渡&动画

# 过渡的类名

在进入/离开的过渡中,会有 6 个 class 切换。

各类名的生命周期

  • 进入
    • v-enter 只存在于第一帧
    • v-enter-active 第一帧到最后一帧,结束后移除
    • v-enter-to 第二帧到最后一帧,结束后移除
  • 离开
    • v-leave 只存在于第一帧
    • v-leave-active 第一帧到最后一帧,结束后移除
    • v-leave-to 第二帧到最后一帧,结束后移除

如果你使用一个没有name<transition> ,则 v- 是这些类名的默认前缀。如果你使用了name="fade",那么 v- 前缀会替换为 fade-

# css过渡 demo

HTML

代码语言:javascript复制
<div id="root">
  <button @click="handleClick">切换</button>
  <transition name="fade">
    <div v-show="show">hello world</div>
  </transition>
</div>

CSS

代码语言:javascript复制
.fade-enter{
  /*第一帧,opacity是0,第二帧开始被移除,即变成1,*/
  opacity: 0
}
.fade-enter-active{
  /*当监控到opacity变化的时候(即从0到1),给2s的过渡*/
  transition: opacity 1s;
}

.fade-leave-to{
  /*首先,opacity是1,离开的第二帧变成0,*/
  opacity: 0
}
.fade-leave-active{
  /*当监控到opacity变化的时候(即从1到0),给2s的过渡*/
  transition: opacity 1s;
}


/*简化代码*/
/*
.fade-enter,
.fade-leave-to{
  opacity: 0;
}

.fade-enter-active,
.fade-leave-active{
  transition: opacity 2s;
}
*/

JS

代码语言:javascript复制
var vm = new Vue({
  el: '#root',
  data: {
    show: true
  },
  methods: {
    handleClick() {
      this.show = !this.show
    }
  }
})

# css动画 demo

HTML

代码语言:javascript复制
<div id="root">
    <button @click="show = !show">切换</button>
      <transition name="bounce">
        <p v-if="show">文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容</p>
      </transition>
  </div>

CSS

代码语言:javascript复制
.bounce-enter-active {
  animation: bounce-in .5s;
}
.bounce-leave-active {
  animation: bounce-in .5s reverse;
}
@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.5);
  }
  100% {
    transform: scale(1);
  }
}

JS

代码语言:javascript复制
var vm = new Vue({
  el: '#root',
  data: {
    show: true
  }
})

# 组件中使用的示例

代码语言:javascript复制
<template>
    <transition name="slide">
         <div class="add-song">
             ...
        </div>
    </transition>
<template>
代码语言:javascript复制
 .add-song
    &.slide-enter-active, &.slide-leave-active
      transition: all 0.3s
    &.slide-enter, &.slide-leave-to
      transform: translate3d(100%, 0, 0)

0 人点赞