vue中transition动画的使用

154 阅读2分钟

原文链接:knife.blog.csdn.net/article/det…

前言
本文用示例介绍Vue.js的过渡与动画的用法。即:transition标签。

官网

进入/离开 & 列表过渡 — Vue.js

过渡基础

过渡的类名

在进入/离开的过渡中,会有 6 个 class 切换。对于这些在过渡中切换的类名来说,如果你使用一个没有名字的 <transition>,则 v- 是这些类名的默认前缀。如果你使用了 <transition name="my-transition">,那么 v-enter 会替换为 my-transition-enter

image.png

image.png

注意

v-enter-to,v-leave一般不写。原因是:按照一般的过渡效果(动画),进入的最后状态就是元素本身的样式,离开的最初状态也是元素本身的样式,所以是没有必要写的。

v-enter, v-leave-to中的css一般相同,一个是进入时过渡(动画)的初始样式,一个是离开过渡(动画)结束时的样式。

v-enter-active ,v-leave-active 中的css一般相同,一般都是用于定义过渡(动画)的过程时间,延迟和曲线函数。当然离开的过渡(动画)的过程时间,延迟和曲线函数和进入的可以是不同的。

实例一:移入移出的案例(元素进来的时候可以"从右往左"滑进来)

<template>
  <div class="compA">
    <button @click="toggle">Toggle</button>
    <transition name="slide-fade">
      <h1 v-show="show">显示测试</h1>
    </transition>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      show: true
    }
  },
  methods: {
    toggle() {
      this.show = !this.show;
    }
  }
}
</script>
 
<style scoped>
.slide-fade-enter-active,
.slide-fade-leave-active {
  transition: all 0.5s ease-out;
}

.slide-fade-enter,
.slide-fade-leave-to {
  transform: translateX(80px); //translateX 向X轴平移,填正数往右平移,填负数,往左平移
  opacity: 0;
}
</style>

实例二:淡入淡出的案例

<template>
  <div class="compA">
    <button @click="toggle">Toggle</button>
    <transition name="fade">
      <h1 v-show="show">显示测试</h1>
    </transition>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      show: true
    }
  },
  methods: {
    toggle() {
      this.show = !this.show;
    }
  }
}
</script>
 
<style scoped>
.fade-enter, .fade-leave-to {
  opacity: 0;
}
 
.fade-enter-to, .fade-leave {//可以省略
  opacity: 1;
}
 
.fade-enter-active, .fade-leave-active {
  transition: opacity 1.5s
}
</style>

实例三:配合animation实现一个放大缩小的动画

<template>
  <div class="compA">
    <button @click="toggle">Toggle</button>
    <transition name="bounce">
      <h1 v-show="show">显示测试</h1>
    </transition>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      show: true
    }
  },
  methods: {
    toggle() {
      this.show = !this.show;
    }
  }
}
</script>
 
<style>
.bounce-enter-active {
  animation: bounce-in 0.5s;
}
.bounce-leave-active {
  animation: bounce-in 0.5s reverse;
}

@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.25);
  }
  100% {
    transform: scale(1);
  }
}
</style>