认识动画


目前实现有很多方案,如
1、vue内置的transition动画
2、Animate css动画效果
3、gsap JS动画
====================
方案一:transition动画
单个组件使用

1、用
2、定义 name 属性
3、定义一些class,需要是你定义的name开头的,后面跟特定的字符,如下是最常用的6个
上图的Opacity是css的一个属性透明度,这是拿这个属性举个例子。
你可以在不同的状态定义不同的css属性,让系统根据前后两个状态自动完成切换动画

多个组件使用

特点
1、默认情况下,它不会渲染一个元素的包裹器,但是你可以指定一个元素并以 tag attribute 进行渲染;
<transition-group tag="p" name="why"><span v-for="item in numbers" :key="item" class="item">{{item}}</span></transition-group>
tag=”p”,相当于span标签外面包裹一层p标签
<transition-group tag="ul"><li v-for="(item, index) in showNames" :key="item" :data-index="index">{{item}}</li></transition-group>
2、过渡模式不可用,因为我们不再相互切换特有的元素;
3、内部元素总是需要提供唯一的 key attribute 值;
4、CSS 过渡的类将会应用在内部的元素中,而不是这个组/容器本身
其他动画

原理


其他属性/设置
1、同时设置过渡和动画

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

设置后,class里面设置的时间就无效了。还可以单独设置进入时间(enter)和退出时间(leave)。
3、过渡的模式mode

多用于动态组件之间切换,没有添加mode属性就会很糟糕,两个组一起显示
4、初次渲染时的动画效果

动画生命周期
transition 组件给我们提供了动画的生命周期函数,这些函数可以帮助我们监听动画执行到什么阶段了。
<template><div class="app"><div><button @click="isShow = !isShow">显示/隐藏</button></div><transition @before-enter="beforeEnter"@enter="enter"@after-enter="afterEnter"@before-leave="beforeLeave"@leave="leave"@afterLeave="afterLeave"><h2 class="title" v-if="isShow">Hello World</h2></transition></div></template><script>export default {data() {return {isShow: true}},methods: {beforeEnter() {console.log("进入动画,开始前触发这个事件");},enter(el,done) {// 常用console.log("进入动画,开始后触发这个事件");done()},afterEnter() {console.log("进入动画,播放完后触发这个事件");},beforeLeave() {console.log("消失动画,开始前触发这个事件");},leave(el,done) {// 常用console.log("消失动画,开始后触发这个事件");done()},afterLeave() {console.log("消失动画,播放完后触发这个事件");}}}</script><style scoped>.title {display: inline-block;}</style>
参数el,done
el:表示执行动画的这个对象,回调函数可以给我们这个对象,方便我们通过其他方法控制。
上面例子,el就是
Hello World
done:当我们使用JavaScript来执行过渡动画时,需要进行 done 回调,否则它们将会被同步调用,过渡会立即完成
css 动画控制

就是不执行css动画
====================
方案二:Animate.css
查看 https://www.yuque.com/yejielin/mypn47/pcw36v#neQW4
1、基于css的动画效果,适用于多种平台,只要能用css都可以用
2、使用简单,只需要加对应的动画class即可实现动画
3、可以同时增加多个动画,链式执行


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



官网:https://animate.style/ 可以查询各种各样的动画,哪些是我们想要的,把名字拿过来
用法2、通过vue定义的动画属性使用



下面的属性是vue给我们定义好的,表示进行某个过程时,自动帮我们增加我们需要的类,如果和用法一同时存在,用法二优先级更高
类似方案一里的类名
属性的值就是类名,注意 animateanimated : 是必定要加的,表示使用动画
(直接点复制,就得到 animatelightSpeedOutLeft)
====================
方案三:gsap 库
通过使用gsap对象里面的方法,实现用js的方式操作动画
