Skip to content

Commit b5b30d2

Browse files
committed
add: transition
1 parent 3001454 commit b5b30d2

File tree

1 file changed

+179
-0
lines changed

1 file changed

+179
-0
lines changed

src/guide/transitions.md

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,185 @@ type: guide
44
order: 12
55
---
66

7+
## 概述
8+
9+
Vue 在元素在DOM中插入、更新或者移除时,提供多种不同方式的应用过渡效果。
10+
包括一下工具:
11+
12+
- 在 CSS 过渡和动画中自动应用 class
13+
- 可以配合使用第三方 CSS 动画库,如 Animate.css
14+
- 在过渡钩子函数中使用 JavaScript 直接操作 DOM
15+
- 可以配合使用第三方 JavaScript 动画库,如 Velocity.js
16+
17+
在这里, 我们会讲到 进入、离开和列表的过渡, 你也可以看下一节的 [管理过渡状态](transitioning-state.html).
18+
19+
## 单元素/组件的过渡
20+
21+
Vue 提供了 `transition` 的封装组件,可以给任何元素和组件添加 entering/leaving 过渡
22+
23+
- 条件渲染 (使用 `v-if`
24+
- 条件展示 (使用 `v-show`
25+
- 动态组件
26+
- 组件根节点
27+
28+
这里是一个典型的例子:
29+
30+
``` html
31+
<div id="demo">
32+
<button v-on:click="show = !show">
33+
Toggle
34+
</button>
35+
<transition name="fade">
36+
<p v-if="show">hello</p>
37+
</transition>
38+
</div>
39+
```
40+
41+
``` js
42+
new Vue({
43+
el: '#demo',
44+
data: {
45+
show: true
46+
}
47+
})
48+
```
49+
50+
``` css
51+
.fade-enter-active, .fade-leave-active {
52+
transition: opacity .5s
53+
}
54+
.fade-enter, .fade-leave-active {
55+
opacity: 0
56+
}
57+
```
58+
59+
{% raw %}
60+
<div id="demo">
61+
<button v-on:click="show = !show">
62+
Toggle
63+
</button>
64+
<transition name="demo-transition">
65+
<p v-if="show">hello</p>
66+
</transition>
67+
</div>
68+
<script>
69+
new Vue({
70+
el: '#demo',
71+
data: {
72+
show: true
73+
}
74+
})
75+
</script>
76+
<style>
77+
.demo-transition-enter-active, .demo-transition-leave-active {
78+
transition: opacity .5s
79+
}
80+
.demo-transition-enter, .demo-transition-leave-active {
81+
opacity: 0
82+
}
83+
</style>
84+
{% endraw %}
85+
86+
当插入或删除带有过渡的元素时,Vue 将:
87+
88+
1. 自动嗅探目标元素是否有 CSS 过渡或动画,并在合适时添加/删除 CSS 类名。
89+
90+
2. 如果设置了过渡的 [JavaScript 钩子函数](#JavaScript-Hooks),会在相应的阶段调用它们。
91+
92+
3. 如果没有找到 JavaScript 钩子并且也没有检测到 CSS 过渡/动画,DOM 操作(插入/删除)在下一帧中立即执行。
93+
94+
### 过渡的-CSS-类名
95+
96+
会有 4 个类名在 enter/leave 的过渡中切换
97+
98+
1. `v-enter`: 定义进入过渡的开始状态。在元素被插入时生效,在下一个帧移除。
99+
100+
2. `v-enter-active`: 定义进入过渡的结束状态。在元素被插入时生效,在 `transition/animation` 完成之后移除。
101+
102+
3. `v-leave`: 定义离开过渡的开始状态。在离开过渡被触发时生效,在下一个帧移除。
103+
104+
4. `v-leave-active`: 定义离开过渡的结束状态。在离开过渡被触发时生效,在 `transition/animation` 完成之后移除。
105+
106+
107+
!!TODO: 这里再有一个漂亮的流程图就棒呆了
108+
109+
对于这些类名,`v` 是过渡名的前缀。使用 `name="my-transition"` 可以重置前缀,比如 `v-enter` 替换为 `my-transition-enter`
110+
111+
`v-enter-active` and `v-leave-active` 可以控制 enter/leave 过渡的不同阶段,下一节,
112+
`v-enter-active` and `v-leave-active` give you the ability to specify different easing curves for enter/leave transitions, which you'll see an example of in the following section.
113+
114+
### CSS 过渡
115+
116+
常用的过渡都是使用 CSS 过渡。
117+
118+
下面是一个简单例子:
119+
120+
``` html
121+
<div id="example-1">
122+
<button @click="show = !show">
123+
Toggle render
124+
</button>
125+
<transition name="slide-fade">
126+
<p v-if="show">hello</p>
127+
</transition>
128+
</div>
129+
```
130+
131+
``` js
132+
new Vue({
133+
el: '#example-1',
134+
data: {
135+
show: true
136+
}
137+
})
138+
```
139+
140+
``` css
141+
/* Enter and leave animations can use different */
142+
/* durations and timing functions. */
143+
.slide-fade-enter-active {
144+
transition: all .3s ease;
145+
}
146+
.slide-fade-leave-active {
147+
transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
148+
}
149+
.slide-fade-enter, .slide-fade-leave-active {
150+
padding-left: 10px;
151+
opacity: 0;
152+
}
153+
```
154+
155+
{% raw %}
156+
<div id="example-1" class="demo">
157+
<button @click="show = !show">
158+
Toggle
159+
</button>
160+
<transition name="slide-fade">
161+
<p v-if="show">hello</p>
162+
</transition>
163+
</div>
164+
<script>
165+
new Vue({
166+
el: '#example-1',
167+
data: {
168+
show: true
169+
}
170+
})
171+
</script>
172+
<style>
173+
.slide-fade-enter-active {
174+
transition: all .3s ease;
175+
}
176+
.slide-fade-leave-active {
177+
transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
178+
}
179+
.slide-fade-enter, .slide-fade-leave-active {
180+
padding-left: 10px;
181+
opacity: 0;
182+
}
183+
</style>
184+
{% endraw %}
185+
7186
## Overview
8187

9188
Vue provides a variety of ways to apply transition effects when items are inserted, updated, or removed from the DOM. This includes tools to:

0 commit comments

Comments
 (0)