认识动画

image.png

image.png

目前实现有很多方案,如
1、vue内置的transition动画
2、Animate css动画效果
3、gsap JS动画

====================

方案一:transition动画

单个组件使用

image.png
1、用标签包裹单个组件或单个元素
2、定义 name 属性
3、定义一些class,需要是你定义的name开头的,后面跟特定的字符,如下是最常用的6个
image.png

上图的Opacity是css的一个属性透明度,这是拿这个属性举个例子。

你可以在不同的状态定义不同的css属性,让系统根据前后两个状态自动完成切换动画

image.png

多个组件使用

image.png

特点

1、默认情况下,它不会渲染一个元素的包裹器,但是你可以指定一个元素并以 tag attribute 进行渲染;

  1. <transition-group tag="p" name="why">
  2. <span v-for="item in numbers" :key="item" class="item">
  3. {{item}}
  4. </span>
  5. </transition-group>

tag=”p”,相当于span标签外面包裹一层p标签

  1. <transition-group tag="ul">
  2. <li v-for="(item, index) in showNames" :key="item" :data-index="index">
  3. {{item}}
  4. </li>
  5. </transition-group>

2、过渡模式不可用,因为我们不再相互切换特有的元素;

3、内部元素总是需要提供唯一的 key attribute 值;
image.png

4、CSS 过渡的类将会应用在内部的元素中,而不是这个组/容器本身

其他动画

image.png

原理

image.png
image.png

其他属性/设置

1、同时设置过渡和动画

image.png

使用时注意:
1、div这种块级元素(默认占据整行)表现会有问题,可以设置成inlineblock
2、多个动画时间不一致,通过type设置以哪个为准
image.png

2、设定指定动画过渡时间

image.png
设置后,class里面设置的时间就无效了。还可以单独设置进入时间(enter)和退出时间(leave)。
image.png

3、过渡的模式mode

image.png
多用于动态组件之间切换,没有添加mode属性就会很糟糕,两个组一起显示
image.png

4、初次渲染时的动画效果

image.png

动画生命周期

transition 组件给我们提供了动画的生命周期函数,这些函数可以帮助我们监听动画执行到什么阶段了。
image.png

  1. <template>
  2. <div class="app">
  3. <div><button @click="isShow = !isShow">显示/隐藏</button></div>
  4. <transition @before-enter="beforeEnter"
  5. @enter="enter"
  6. @after-enter="afterEnter"
  7. @before-leave="beforeLeave"
  8. @leave="leave"
  9. @afterLeave="afterLeave">
  10. <h2 class="title" v-if="isShow">Hello World</h2>
  11. </transition>
  12. </div>
  13. </template>
  14. <script>
  15. export default {
  16. data() {
  17. return {
  18. isShow: true
  19. }
  20. },
  21. methods: {
  22. beforeEnter() {
  23. console.log("进入动画,开始前触发这个事件");
  24. },
  25. enter(el,done) {
  26. // 常用
  27. console.log("进入动画,开始后触发这个事件");
  28. done()
  29. },
  30. afterEnter() {
  31. console.log("进入动画,播放完后触发这个事件");
  32. },
  33. beforeLeave() {
  34. console.log("消失动画,开始前触发这个事件");
  35. },
  36. leave(el,done) {
  37. // 常用
  38. console.log("消失动画,开始后触发这个事件");
  39. done()
  40. },
  41. afterLeave() {
  42. console.log("消失动画,播放完后触发这个事件");
  43. }
  44. }
  45. }
  46. </script>
  47. <style scoped>
  48. .title {
  49. display: inline-block;
  50. }
  51. </style>

参数el,done

el:表示执行动画的这个对象,回调函数可以给我们这个对象,方便我们通过其他方法控制。

上面例子,el就是

Hello World

done:当我们使用JavaScript来执行过渡动画时,需要进行 done 回调,否则它们将会被同步调用,过渡会立即完成

css 动画控制

image.png
就是不执行css动画

====================

方案二:Animate.css

查看 https://www.yuque.com/yejielin/mypn47/pcw36v#neQW4

1、基于css的动画效果,适用于多种平台,只要能用css都可以用
2、使用简单,只需要加对应的动画class即可实现动画
3、可以同时增加多个动画,链式执行

image.png
image.png

用法1、和Vue 的过渡系统结合使用

image.png
image.png
image.png image.png
官网:https://animate.style/ 可以查询各种各样的动画,哪些是我们想要的,把名字拿过来

用法2、通过vue定义的动画属性使用

image.png
image.png
image.png
下面的属性是vue给我们定义好的,表示进行某个过程时,自动帮我们增加我们需要的类,如果和用法一同时存在,用法二优先级更高
image.png
类似方案一里的类名
image.png

属性的值就是类名,注意 animateanimated : 是必定要加的,表示使用动画
image.png(直接点复制,就得到 animate
lightSpeedOutLeft)

====================

方案三:gsap 库

通过使用gsap对象里面的方法,实现用js的方式操作动画

查看 https://www.yuque.com/yejielin/mypn47/vc88xs#ZS9ib