@@ -7,7 +7,7 @@ Vue は、DOM からアイテムが追加、更新、削除されたときにト
7
7
- トランジションフックが実行されている間、JavaScript を使って直接 DOM 操作を行います。
8
8
- サードパーティの JavaScript アニメーションライブラリと連携します。
9
9
10
- このページでは、entering/leaving とリストのトランジションについてのみ取り扱いますが 、次の章では、[ 状態のトランジション] ( transitions-state.html ) について扱います。
10
+ このページでは、entering/leaving のトランジションについてのみ取り扱いますが 、次の章では、[ リストのトランジション ] ( transitions-list.html ) と [ 状態のトランジション] ( transitions-state.html ) について扱います。
11
11
12
12
## 単一要素/コンポーネントのトランジション
13
13
@@ -70,12 +70,17 @@ Vue.createApp(Demo).mount('#demo')
70
70
71
71
以下は、enter/leave トランジションのために適用される 6 つのクラスです。
72
72
73
- 1 . ` v-enter-from ` : enter の開始状態。要素が挿入される前に適用され、要素が挿入された 1 フレーム後に削除されます。
74
- 2 . ` v-enter-active ` : enter の活性状態。トランジションに入るフェーズ中に適用されます。要素が挿入される前に追加され、トランジション/アニメーションが終了すると削除されます。このクラスは、トランジションの開始に対して、期間、遅延、およびイージングカーブを定義するために使用できます。
75
- 3 . ` v-enter-to ` : ** バージョン 2.1.8 以降でのみ利用可能です。** enter の終了状態。要素が挿入された 1 フレーム後に追加され (同時に ` v-enter ` が削除されます)、トランジション/アニメーションが終了すると削除されます。
73
+ 1 . ` v-enter-from ` : enter の開始状態。その要素が挿入される前に適用され、その要素が挿入された 1 フレーム後に削除されます。
74
+
75
+ 2 . ` v-enter-active ` : enter の活性状態。トランジションに入るフェーズ中に適用されます。その要素が挿入される前に追加され、そのトランジション/アニメーションが終了すると削除されます。このクラスは、トランジションの開始に対して、期間、遅延、およびイージングカーブを定義するために使用できます。
76
+
77
+ 3 . ` v-enter-to ` : enter の終了状態。その要素が挿入された 1 フレーム後に追加され (同時に ` v-enter-from ` が削除されます)、そのトランジション/アニメーションが終了すると削除されます。
78
+
76
79
4 . ` v-leave-from ` : leave の開始状態。トランジションの終了がトリガされるとき、直ちに追加され、1フレーム後に削除されます。
80
+
77
81
5 . ` v-leave-active ` : leave の活性状態。トランジションが終わるフェーズ中に適用されます。leave トランジションがトリガされるとき、直ちに追加され、トランジション/アニメーションが終了すると削除されます。このクラスは、トランジションの終了に対して、期間、遅延、およびイージングカーブを定義するために使用できます。
78
- 6 . ` v-leave-to ` : ** バージョン 2.1.8 以降でのみ利用可能です。** leave の終了状態。leave トランジションがトリガされた 1 フレーム後に追加され (同時に ` v-leave ` が削除されます)、トランジション/アニメーションが終了すると削除されます。
82
+
83
+ 6 . ` v-leave-to ` : leave の終了状態。leave トランジションがトリガされた 1 フレーム後に追加され (同時に ` v-leave-from ` が削除されます)、トランジション/アニメーションが終了すると削除されます。
79
84
80
85
![ Transition Diagram] ( /images/transitions.svg )
81
86
@@ -138,7 +143,7 @@ CSS アニメーションは、CSS トランジションと同じように適用
138
143
これは簡潔にするために CSS ルールの接頭辞を除いた例です。
139
144
140
145
``` html
141
- <div id =" example-2 " >
146
+ <div id =" demo " >
142
147
<button @click =" show = !show" >Toggle show</button >
143
148
<transition name =" bounce" >
144
149
<p v-if =" show" >
@@ -174,7 +179,7 @@ Vue.createApp(Demo).mount('#demo')
174
179
transform : scale (0 );
175
180
}
176
181
50% {
177
- transform : scale (1.5 );
182
+ transform : scale (1.25 );
178
183
}
179
184
100% {
180
185
transform : scale (1 );
@@ -190,10 +195,10 @@ Vue.createApp(Demo).mount('#demo')
190
195
191
196
- ` enter-from-class `
192
197
- ` enter-active-class `
193
- - ` enter-to-class ` (2.1.8+)
198
+ - ` enter-to-class `
194
199
- ` leave-from-class `
195
200
- ` leave-active-class `
196
- - ` leave-to-class ` (2.1.8+)
201
+ - ` leave-to-class `
197
202
198
203
これらは、クラス名の規約を上書きします。これは、Vue のトランジションシステムと [ Animate.css] ( https://daneden.github.io/animate.css/ ) のような既存の CSS アニメーションライブラリを組み合わせたいときに特に便利です。
199
204
@@ -241,9 +246,7 @@ Vue はトランジションが終了したことを把握するためのイベ
241
246
242
247
### 明示的なトランジション期間の設定
243
248
244
- TODO: validate and provide an example
245
-
246
- > 2.2.0 から新規追加
249
+ <!-- TODO: validate and provide an example -->
247
250
248
251
ほとんどの場合、 Vue は、自動的にトランジションが終了したことを見つけ出すことは可能です。デフォルトでは、 Vue はルート要素の初めの ` transitionend ` もしくは ` animationend ` イベントを待ちます。しかし、これが常に望む形とは限りません。例えば、幾つかの入れ子となっている内部要素にてトランジションの遅延がある場合や、ルートのトランジション要素よりも非常に長いトランジション期間を設けている場合の、一連のトランジションのまとまりなどです。
249
252
@@ -289,7 +292,8 @@ methods: {
289
292
beforeEnter (el ) {
290
293
// ...
291
294
},
292
- // CSS と組み合わせて使う時、done コールバックはオプションです
295
+ // CSS と組み合わせて使う時、
296
+ // done コールバックはオプションです
293
297
enter (el , done ) {
294
298
// ...
295
299
done ()
@@ -308,7 +312,8 @@ methods: {
308
312
beforeLeave (el ) {
309
313
// ...
310
314
},
311
- // CSS と組み合わせて使う時、done コールバックはオプションです
315
+ // CSS と組み合わせて使う時、
316
+ // done コールバックはオプションです
312
317
leave (el , done ) {
313
318
// ...
314
319
done ()
@@ -325,7 +330,7 @@ methods: {
325
330
326
331
これらのフックは、CSS トランジション/アニメーション、または別の何かと組み合わせて使うことができます。
327
332
328
- JavaScript のみを利用したトランジションの場合は、** ` done ` コールバックを ` enter ` と ` leave ` フックで呼ぶ必要があります** 。呼ばない場合は、フックは同期的に呼ばれ、トランジションはただちに終了します。また、 ` :css="false" ` を追加することで、CSS の検出をスキップすることを Vue に伝えられます。これによってわずかにパフォーマンスが改善するほか、CSS のルールの誤ったトランジションへの干渉を防ぐことができます。
333
+ JavaScript のみを利用したトランジションの場合は、** ` done ` コールバックを ` enter ` と ` leave ` フックで呼ぶ必要があります** 。呼ばない場合は、フックは同期的に呼ばれ、トランジションはただちに終了します。また、 ` :css="false" ` を追加することで、CSS の検出をスキップすることも Vue に伝えられます。これによってわずかにパフォーマンスが改善するほか、CSS のルールの誤ったトランジションへの干渉を防ぐことができます。
329
334
330
335
今から例をみていきましょう。これは [ GreenSock] ( https://greensock.com/ ) を使ったシンプルな JavaScript トランジションの例です:
331
336
@@ -421,19 +426,19 @@ Vue.createApp(Demo).mount('#demo')
421
426
</transition >
422
427
```
423
428
424
- ` v-if ` を複数使ったり 、ひとつの要素に対して動的プロパティでバインディングを行ういずれの場合でも、複数個の要素を対象にトランジションすることが可能です。例:
429
+ ` v-if ` / ` v-else-if ` / ` v-else ` を使ったり 、ひとつの要素に対して動的プロパティでバインディングを行ういずれの場合でも、複数個の要素を対象にトランジションすることが可能です。例:
425
430
426
- TODO: rewrite example and put in codepen example
431
+ <!-- TODO: rewrite example and put in codepen example -->
427
432
428
433
``` html
429
434
<transition >
430
435
<button v-if =" docState === 'saved'" key =" saved" >
431
436
Edit
432
437
</button >
433
- <button v-if =" docState === 'edited'" key =" edited" >
438
+ <button v-else- if =" docState === 'edited'" key =" edited" >
434
439
Save
435
440
</button >
436
- <button v-if =" docState === 'editing'" key =" editing" >
441
+ <button v-else- if =" docState === 'editing'" key =" editing" >
437
442
Cancel
438
443
</button >
439
444
</transition >
@@ -503,19 +508,22 @@ computed: {
503
508
504
509
コンポーネント間のトランジションは、 ` key ` 属性が必要ではないのでさらに単純です。代わりに、ただ [ 動的コンポーネント] ( components.html#動的コンポーネント ) でラップするだけです:
505
510
506
- TODO: update to Vue 3
507
-
508
511
``` html
509
- <transition name =" component-fade" mode =" out-in" >
510
- <component :is =" view" ></component >
511
- </transition >
512
+ <div id =" demo" >
513
+ <input v-model =" view" type =" radio" value =" v-a" id =" a" ><label for =" a" >A</label >
514
+ <input v-model =" view" type =" radio" value =" v-b" id =" b" ><label for =" b" >B</label >
515
+ <transition name =" component-fade" mode =" out-in" >
516
+ <component :is =" view" ></component >
517
+ </transition >
518
+ </div >
512
519
```
513
520
514
521
``` js
515
- new Vue ({
516
- el: ' #transition-components-demo' ,
517
- data: {
518
- view: ' v-a'
522
+ const Demo = {
523
+ data () {
524
+ return {
525
+ view: ' v-a'
526
+ }
519
527
},
520
528
components: {
521
529
' v-a' : {
@@ -525,16 +533,19 @@ new Vue({
525
533
template: ' <div>Component B</div>'
526
534
}
527
535
}
528
- })
536
+ }
537
+
538
+ Vue .createApp (Demo).mount (' #demo' )
529
539
```
530
540
531
541
``` css
532
542
.component-fade-enter-active ,
533
543
.component-fade-leave-active {
534
544
transition : opacity 0.3s ease ;
535
545
}
536
- .component-fade-enter , .component-fade-leave-to
537
- /* .component-fade-leave-active below version 2.1.8 */ {
546
+
547
+ .component-fade-enter-from ,
548
+ .component-fade-leave-to {
538
549
opacity : 0 ;
539
550
}
540
551
```
0 commit comments