一:前言
鉴于之前看到有人的网页动画很好看,所以特去学习vue中的动画,借这篇文章将所学的vue动画做一个总结。其中包含animate.css的引入和使用。
二:进入/离开&列表过渡
2.1 单元素/组件的过渡
Vue 提供了
transition
的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡
- 条件渲染 (使用
v-if
)- 条件展示 (使用
v-show
)- 动态组件
- 组件根节点
2.1.1 过渡的类名
在进入/离开的过渡中,会有 6 个 class 切换。
其中两个active类是 可以被用来定义进入过渡的过程时间,延迟和曲线函数。
另外四个用来定于初末状态。
对于这些在过渡中切换的类名来说,如果你使用一个没有名字的 ,则 `v-` 是这些类名的默认前缀。如果你使用了
,那么 v-enter
会替换为 my-transition-enter
。
2.1.2 自定义过渡的类名
我们可以通过以下 attribute 来自定义过渡类名:
enter-class
enter-active-class
enter-to-class
(2.1.8+)leave-class
leave-active-class
leave-to-class
(2.1.8+)
他们的优先级高于普通的类名,这对于 Vue 的过渡系统和其他第三方 CSS 动画库,如 结合使用十分有用。(第三部分会讲到如何使用这个动画库)
2.1.3 CSS过渡
new Vue({ el: '#example-1', data: { show: true } })hello
2.1.4 CSS动画
只改上方的style部分
.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); } }
2.1.5 显性的过渡持续时间
在这种情况下你可以用 `` 组件上的 duration
属性定制一个显性的过渡持续时间 (以毫秒计):
...
你也可以定制进入和移出的持续时间:
...
2.1.6 JaveScript 钩子
可以在属性中声明 JavaScript 钩子
这些钩子函数可以结合 CSS transitions/animations
使用,也可以单独使用。
当只用 JavaScript 过渡的时候,在
enter
和leave
中必须使用done
进行回调。否则,它们将被同步调用,过渡会立即完成。推荐对于仅使用 JavaScript 过渡的元素添加
v-bind:css="false"
,Vue 会跳过 CSS 的检测。这也可以避免过渡过程中 CSS 的影响。
详细用法,请百度。。。(此节较难使用)
2.2 多个元素的过渡
最常见的多标签过渡是一个列表和描述这个列表为空消息的元素:
Sorry, no items found.
可以这样使用,但是有一点需要注意:
当有相同标签名的元素切换时,需要通过
key
attribute 设置唯一的值来标记以让 Vue 区分它们,否则 Vue 为了效率只会替换相同标签内部的内容。即使在技术上没有必要,给在 `` 组件中的多个元素设置 key 是一个更好的实践
2.2.1过渡模式
有两个元素过渡时,一个离开过渡的时候另一个开始进入过渡。这是 <transition>
的默认行为 - 进入和离开同时发生。
同时生效的进入和离开的过渡不能满足所有要求,所以 Vue 提供了 过渡模式
in-out
:新元素先进行过渡,完成之后当前元素过渡离开。out-in
:当前元素先进行过渡,完成之后新元素过渡进入。
2.3多个组件的过渡
多个组件的过渡简单很多 - 我们不需要使用 key
attribute。相反,我们只需要使用:
new Vue({ el: '#transition-components-demo', data: { view: 'v-a' }, components: { 'v-a': { template: ' Component A' }, 'v-b': { template: 'Component B' } } }) .component-fade-enter-active, .component-fade-leave-active { transition: opacity .3s ease; } .component-fade-enter, .component-fade-leave-to /* .component-fade-leave-active for below version 2.1.8 */ { opacity: 0; }
2.4 列表的过渡
目前为止,关于过渡我们已经讲到:
- 单个节点
- 同一时间渲染多个节点中的一个
那么怎么同时渲染整个列表,比如使用 v-for
?在这种场景中,使用 `` 组件。在我们深入例子之前,先了解关于这个组件的几个特点:
- 不同于
,它会以一个真实元素呈现:默认为一个
。你也可以通过tag
attribute 更换为其他元素。 - 不可用,因为我们不再相互切换特有的元素。
- 内部元素 总是需要 提供唯一的
key
属性值。 - CSS 过渡的类将会应用在内部的元素中,而不是这个组/容器本身。
2.4.1
现在让我们由一个简单的例子深入,进入和离开的过渡使用之前一样的 CSS 类名。
new Vue({ el: '#list-demo', data: { items: [1,2,3,4,5,6,7,8,9], nextNum: 10 }, methods: { randomIndex: function () { return Math.floor(Math.random() * this.items.length) }, add: function () { this.items.splice(this.randomIndex(), 0, this.nextNum++) }, remove: function () { this.items.splice(this.randomIndex(), 1) }, } }) .list-item { display: inline-block; margin-right: 10px; } .list-enter-active, .list-leave-active { transition: all 1s; } .list-enter, .list-leave-to /* .list-leave-active for below version 2.1.8 */ { opacity: 0; transform: translateY(30px); }{ { item }}
2.4.2 列表的排序过渡
<transition-group>
组件还有一个特殊之处。不仅可以进入和离开动画,还可以改变定位。要使用这个新功能只需了解新增的 v-move
attribute,它会在元素的改变定位的过程中应用。像之前的类名一样,可以通过 name
属性来自定义前缀,也可以通过 move-class
属性手动设置。
v-move
对于设置过渡的切换时机和过渡曲线非常有用,你会看到如下的例子:
new Vue({ el: '#flip-list-demo', data: { items: [1,2,3,4,5,6,7,8,9] }, methods: { shuffle: function () { this.items = _.shuffle(this.items) } } }) .flip-list-move { transition: transform 1s; }{ { item }}
这个看起来很神奇,内部的实现,Vue 使用了一个叫 简单的动画队列
使用 transforms 将元素从之前的位置平滑过渡新的位置。3.使用Animate.css 来加载动画
3.1 安装
3.1.1使用npm方法
npm install animate.css --save
3.1.2使用yarn方法
yarn add animate.css
3.2 引入
3.2.1 vue-cli中引入
在main.js中引入
import animate from 'animate.css' // npm install animate.css --save安装,在引入 Vue.use(animate)
3.2.2在单页面中引入
3.2使用
使用前都要在类前加 animated
3.2.1在vue-cli中使用
即应用自定义的过渡类名 注意: 使用前都要在类前加 animated
hahahahah!!!
3.2.2 设置延迟和速度
用所列的类名来控制,只需写入所需类名。
设置延迟
Class Name | Delay Time |
---|---|
delay-1s | 1s |
delay-2s | 2s |
delay-3s | 3s |
delay-4s | 4s |
delay-5s | 5s |
*Note: The default delays are from 1 second to 5 seconds only. If you need custom delays, add it directly to your own CSS code.*
设置速度
Class Name | Speed Time |
---|---|
slow | 2s |
slower | 3s |
fast | 800ms |
faster | 500ms |
*Note: The
animated
class has a default speed of1s
. If you need custom duration, add it directly to your own CSS code.*