动画

使用css动画样式,配合vue实现动画效果。

  1. 编写模板 ```vue

  1. 2.
  2. 编写动画样式
  3. ```css
  4. h1 {
  5. background-color: orange;
  6. }
  7. /* 进入的动画 */
  8. .come {
  9. animation: test 1s linear;
  10. }
  11. /* 离开的动画 */
  12. .go {
  13. animation: test 1s reverse;
  14. }
  15. /* 定义动画 */
  16. @keyframes test {
  17. from {
  18. transform: translateX(-100%);
  19. }
  20. to {
  21. transform: translateX(0px);
  22. }
  23. }
  1. 要使用vue动画的标签使用<transition>包裹
    1. <template>
    2. <div>
    3. <button @click="isShow = !isShow">显示/隐藏</button>
    4. <!-- 使用transition包裹住要使用动画的标签 -->
    5. <transition>
    6. <h1 v-show="isShow">你好啊</h1>
    7. </transition>
    8. </div>
    9. </template>
  1. 将进入的动画样式改为.v-enter-active,离开的动画改为.v-leave-active: ```css / 当vue渲染transition标签内容时,vue会自动加载v-enter-active动画样式 / .v-enter-active { animation: test 1s linear; }

/ 当transition标签内容不展示时,vue会自动使用v-leave-active动画样式离开 / .v-leave-active { animation: test 1s reverse; }

  1. 总结:
  2. 如果要使用css动画配合vue,需要:
  3. 1. 要使用动画的内容使用`<transition>`标签包裹
  4. 2. 定义`.v-enter-active`入场动画、`.v-leave-active`离场动画
  5. 如果页面中有多个`<transition>`,需要有不同的动画样式,可以为`<transition>`指定`name`属性:
  6. ```html
  7. <transition name='hello'>
  8. </transition>

此时定义的入场动画、离场动画的v也需要被替换为指定的名称:

  1. .hello-enter-active {
  2. .....
  3. }
  4. .hello-leave-active {
  5. ....
  6. }

页面刚打开时,没有动画效果,如果需要在页面打开就直接展示动画效果,需要使用appear属性设置为true:

  1. <transition name='hello' :appear="true"></transition>
  2. <!-- 可以简写为 -->
  3. <transition name='hello' appear></transition>

过渡

使用vue的过渡实现动画效果。

  1. 编写模板 ```vue

  1. 2.
  2. 编写样式
  3. ```vue
  4. <style scoped>
  5. h1 {
  6. background-color: orange;
  7. }
  8. /* 进入的起点,离开的终点 */
  9. .hello-enter,.hello-leave-to {
  10. transform: translateX(-100%);
  11. }
  12. /* 进入的终点,离开的起点 */
  13. .hello-enter-to,.hello-leave {
  14. transform: translateX(0);
  15. }
  16. .hello-enter-active,.hello-leave-active{
  17. transition: 0.5s linear;
  18. }
  19. </style>

总结:

vue的过渡效果中:入场动画位置起点.v-enter,入场动画位置终点.v-enter-to,离场动画起点.v-leave,离场动画终点.v-leave-to

动画的时长等需要在.v-enter-active.v-leave-active中定义。

多个元素过渡

<transition>标签内只能有一个根元素,例如:

  1. <template>
  2. <transition>
  3. <!-- transition内部只能有一个根元素 -->
  4. <h1>hello</h1>
  5. </transition>
  6. </template>

如果需要过渡的内容是一个列表,需要使用<transition-group>,而且被包裹的元素需要有key属性:

  1. <template>
  2. <!-- 使用transition-group -->
  3. <transition-group name='hello'>
  4. <!-- 被包裹的标签需要有key属性 -->
  5. <h1 v-show='isShow' key='1'>hello</h1>
  6. <h1 v-show='isShow' key='2'>world</h1>
  7. </transition-group>
  8. </template>

使用第三方库

可以使用一些已经成型的封装好了的动画库,例如Animate.css。

安装Animate:

  1. npm i animate.css

引入animate库:

  1. <script>
  2. import 'animate.css' // 引入样式库
  3. </script>

在模板中直接库里面的样式即可,无需再自己定义样式:

name属性必须为animate__animated animate__bounce

enter-active-class定义入场动画,leave-active-class定义离场动画,动画名称可以在animate.css官网复制

  1. <template>
  2. <div>
  3. <button @click="isShow = !isShow">显示/隐藏</button>
  4. <transition
  5. appear
  6. name="animate__animated animate__bounce"
  7. enter-active-class="animate__swing"
  8. leave-active-class="animate__backOutUp"
  9. >
  10. <h1 v-show="isShow">你好啊</h1>
  11. </transition>
  12. </div>
  13. </template>