1. トランジションとアニメーションの違い遷移: 通常、要素の属性の状態の変化を示すために使用されます。 アニメーション: 通常、要素の動きを示すために使用されます。 2. Vueを使用して基本的なCSSトランジションとアニメーションを実装する1. アニメーション/* css */ @keyframes 左から右へ { 0% { 変換: translateX(-100px); } 50% { 変換: translateX(-50px); } 100% { 変換: translateX(0); } } .アニメーション{ アニメーション: 左から右へ 3秒; } // js const app = Vue.createApp({ データ() { 戻る { アニメーション: アニメーション: true } } }, メソッド: { ハンドルクリック(){ this.animate.animation = !this.animate.animation } }, テンプレート: ` <div :class='animate'>こんにちは</div> <button @click='handleClick'>スイッチ</button> ` }); 2. 移行/* css */ 。遷移 { 遷移: 背景色 3s 線形 0s; } 。金 { 背景色: ゴールド; } .シアン{ 背景色: シアン; } // js const app = Vue.createApp({ データ() { 戻る { アニメーション: 遷移: true、 ゴールド:本当です、 シアン: 偽 } } }, メソッド: { ハンドルクリック() { this.animate.gold = !this.animate.gold; this.animate.cyan = !this.animate.cyan; } }, テンプレート: ` <div :class='animate'>こんにちは</div> <button @click='handleClick'>スイッチ</button> ` }); 上記は、class 属性を設定することで実現されますが、style 属性を設定することでも実現できます。 /* css */ 。遷移 { 遷移: 背景色 3s 線形 0s; } // js データ() { 戻る { 遷移: '遷移', スタイルオブジェクト: { 背景色: 'ゴールド' } } }, メソッド: { ハンドルクリック() { if(this.styleObject.backgroundColor === 'ゴールド'){ this.styleObject.backgroundColor = 'シアン'; }それ以外{ this.styleObject.backgroundColor = 'ゴールド'; } } }, テンプレート: ` <div :class='transition' :style='styleObject'>こんにちは</div> <button @click='handleClick'>スイッチ</button> ` 3. トランジションタグを使用して、単一の要素/コンポーネントのトランジションとアニメーション効果を実現します。1. 移行の基本的な紹介
2. 遷移の遷移クラス開始/終了遷移中は、6 つのクラスが切り替わります。
3. 遷移の例遷移が必要な要素を遷移タグで囲みます。遷移に必要なクラスを設定します。上記の6つのクラスから選択できます。 /* css */ /* .v-enter-from { 不透明度: 0; } .v-enter-active { 遷移: 不透明度 1 秒の緩和; } .v-enter-to { 不透明度: 1; } .v-leave-from { 不透明度: 1; } .v-アクティブ状態を解除{ 遷移: 不透明度 1 秒の緩和; } .v-leave-to { 不透明度: 0; } */ /* 略語 */ .v-enter-from、.v-leave-to{ 不透明度: 0; } .v-enter-active、.v-leave-active{ 遷移: 不透明度 1 秒の緩和; } // js const app = Vue.createApp({ データ() { 戻る { 表示: 真 } }, メソッド: { ハンドルクリック() { this.show = !this.show; } }, テンプレート: ` <遷移> <div v-if='show'>こんにちは</div> </トランジション> <button @click='handleClick'>スイッチ</button> ` }); 4. アニメーションの例アニメーション効果を使用するには、CSS 部分を変更するだけで、JS 部分は変更されません。 /* css */ @keyframes シェイクイン { 0% { 変換: translateX(-50px); } 50% { 変換: translateX(50px); } 100% { 変換: translateX(0px); } } @keyframes シェイクアウト { 0% { 変換: translateX(50px); } 50% { 変換: translateX(-50px); } 100% { 変換: translateX(0px); } } .v-enter-active{ アニメーション: シェイクイン 1 秒、イーズイン; } .v-アクティブから抜ける{ アニメーション: シェイクアウト 1 秒、イーズインアウト; } 5. 遷移のname属性
// js <トランジション名='hy'> <div v-if='show'>こんにちは</div> </トランジション> /* css */ .hy-enter-from、.hy-leave-to{ 不透明度: 0; } .hy-enter-active、.hy-leave-active{ 遷移: 不透明度 1 秒の緩和; } 6. 遷移クラス名をカスタマイズする次の属性を使用して遷移クラス名をカスタマイズできます。
これらは通常のクラス名よりも優先順位が高く、Vue のトランジション システムをAnimate.css などの他のサードパーティ CSS アニメーション ライブラリと組み合わせる場合に便利です。 // まずスタイルシートをインポートします <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" rel="external nofollow" /> const app = Vue.createApp({ データ() { 戻る { 表示: 真 } }, メソッド: { ハンドルクリック() { this.show = !this.show; } }, // トランジションクラス名をカスタマイズしてアニメーションスタイルテンプレートを追加します: ` <トランジション名='hy' enter-active-class='animate__animated animate__bounce' アクティブクラスを「animate__animated animate__bounce」にします。 <div v-if='show'>こんにちは</div> </トランジション> <button @click='handleClick'>スイッチ</button> ` }); 7. トランジションとアニメーションを同時に設定する
遷移時間が長い場合、type='transiton' を使用した場合の効果は次のようになります。 アニメーションは最初に完了しますが、遷移は終了せず、要素が消える前に完全に実行されることがわかります。 /* css */ @keyframes シェイクイン { 0% { 変換: translateX(-50px); } 50% { 変換: translateX(50px); } 100% { 変換: translateX(0px); } } @keyframes シェイクアウト { 0% { 変換: translateX(50px); } 50% { 変換: translateX(-50px); } 100% { 変換: translateX(0px); } } .v-enter-from、 .v-leave-to { 色: 赤; } .v-enter-active { アニメーション: シェイクイン 1 秒、イーズイン; トランジション: カラー 3 秒のイーズイン; } .v-enter-to、.v-leave-from { 色: 緑; } .v-アクティブ状態を解除{ アニメーション: シェイクアウト 1 秒、イーズインアウト; トランジション: カラー 3 秒のイーズインアウト; } // js const app = Vue.createApp({ データ() { 戻る { 表示: 真 } }, メソッド: { ハンドルクリック() { this.show = !this.show; } }, テンプレート: ` <トランジションタイプ='トランジション'> <div v-if='show'>こんにちは</div> </トランジション> <button @click='handleClick'>スイッチ</button> ` }); 遷移時間が長い場合は、type='animation ' を使用します。
<トランジションタイプ='アニメーション'> <div v-if='show'>こんにちは</div> </トランジション> 8. 持続時間プロパティ
<トランジション:duration='100'> <div v-if='show'>こんにちは</div> </トランジション> エントリーとエグジットの期間をカスタマイズすることもできます。 <transition :duration='{ enter: 1000, leave: 3000 }' > <div v-if='show'>こんにちは</div> </トランジション> 9. jsを使用してアニメーションを実装する
js でアニメーションを実装するには、 transition 属性で JavaScript フックを宣言します。
const app = Vue.createApp({ データ() { 戻る { 表示: 真 } }, メソッド: { ハンドルクリック() { this.show = !this.show; }, ハンドルBeforeEnter(el){ el.style.color = '赤'; }, handleEnter(el, 完了){ 定数タイマー = setInterval(()=>{ if(el.style.color === '赤'){ el.style.color = '青'; }それ以外{ el.style.color = '赤'; } }, 1000); タイムアウトを設定します(()=>{ タイマーの間隔をクリアします。 // アニメーション終了マーク // done() が実行されない場合、handleAfterEnter は done() を実行しません。 }, 3000) }, ハンドルAfterEnter(el){ console.log('成功'); } }, テンプレート: ` <トランジション:css='false' @before-enter='handleBeforeEnter' @enter='ハンドルEnter' @after-enter='handleAfterEnter' > <div v-if='show'>こんにちは</div> </トランジション> <button @click='handleClick'>スイッチ</button> ` }); // js const app = Vue.createApp({ コンポーネント: ['item-a', 'item-b'], データ() { 戻る { コンポーネント: 'item-a' } }, メソッド: { ハンドルクリック() { if (this.component === 'item-a') { this.component = 'item-b'; } それ以外 { this.component = 'item-a'; } } }, テンプレート: ` <遷移モード='out-in' が表示されます> <コンポーネント:is='コンポーネント' /> </トランジション> <button @click='handleClick'>スイッチ</button> ` }); app.component('item-a', { テンプレート: `<div>hello</div>` }); app.component('item-b', { テンプレート: `<div>bye</div>` }); 4. コンポーネントと要素の切り替えアニメーションの実装
/* css */ .v-enter-from、 .v-leave-to { 不透明度: 0; } .v-enter-active、 .v-アクティブ状態を解除{ 遷移: 不透明度 1 秒のイーズイン; } .v-enter-to、 .v-leave-from { 不透明度: 1; } // js const app = Vue.createApp({ コンポーネント: ['item-a', 'item-b'], データ() { 戻る { コンポーネント: 'item-a' } }, メソッド: { ハンドルクリック() { if (this.component === 'item-a') { this.component = 'item-b'; } それ以外 { this.component = 'item-a'; } } }, テンプレート: ` <遷移モード='out-in' が表示されます> <コンポーネント:is='コンポーネント' /> </トランジション> <button @click='handleClick'>スイッチ</button> ` }); app.component('item-a', { テンプレート: `<div>hello</div>` }); app.component('item-b', { テンプレート: `<div>bye</div>` }); 5. リストアニメーション
/* css */ .インラインブロック { 表示: インラインブロック; 右マージン: 10px; } .v-enter-from、 .v-leave-to { 不透明度: 0; 変換: translateY(30px); } .v-enter-active { 遷移: すべて 1 の緩和; } .v-アクティブ状態を解除{ 位置: 絶対; } .v-移動{ 遷移: すべて 1 の緩和; } 6. 状態アニメーションデータ要素自体についても、数値や演算、カラー表示、SVG ノードの位置、要素のサイズなどのプロパティの変更によってアニメーション効果を実現できます。 番号変更の例: const app = Vue.createApp({ データ() { 戻る { 番号: 1 } }, メソッド: { ハンドルクリック() { 定数タイマー = setInterval(() => { if (this.number >= 10) { クリアインターバル(タイマー) }それ以外{ this.number++; } }, 100); } }, テンプレート: ` <div>{{番号}}</div> <button @click='handleClick'>追加</button> ` });
要約するVue を使用して CSS トランジションとアニメーションを実装する方法に関するこの記事はこれで終わりです。Vue を使用して CSS トランジションとアニメーションを実装する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。皆様が今後も 123WORDPRESS.COM を応援してくれることを願っています。 以下もご興味があるかもしれません:
|
<<: ウェブデザインにおける階層化インターフェースの設計経験
「壮大」という言葉は、おそらく現代のデザイナーが最も聞きたくない言葉でしょう。デザイナー:「デザイン...
目次プロトタイプチェーンプロトタイプチェーンに基づいてシンプルなJQueryライブラリを実装すること...
Docker コンテナに繰り返し入って操作することを避けるために、コンテナ内の一連の命令をホストマシ...
今日皆さんにお伝えしたいトピックは、「皆さんがよく話題にするテーブル スペースとは一体何でしょうか。...
目次意味構造例カスタムショートカットキー元に戻すとやり直し録音と再生マクロ要約する意味リクエストをオ...
背景: 開発プロセスでは、現在の月、現在の日、現在の時間、今後数日など、時間を判断条件としてデータを...
目次1. プラグイン式を使用する2. プラグイン式でv-cloakを使用してちらつきの問題を解決する...
win10 + Ubuntu 20.04 LTS デュアルシステムインストール (UEFI + GP...
導入この記事では、Ubuntu 18.04 デスクトップ システムでディスクを目的のディレクトリにマ...
目次1. シーンの読み込み2. ノードを見つける1. ノード検索2. その他のノード操作3. 再生ア...
まず、yumを使ってCentOSにPHPをインストールする方法を紹介します。 1. PHPのyumソ...
序文以前、画像とテキストの垂直方向のずれの問題について説明しました。ここで示した小さな例では、小さな...
序文場合によっては、次の図のような浮動効果の要件が必要になります。 成し遂げる標準的な通常の状況では...
実際の業務や面接では、「配列の重複排除」の問題によく遭遇します。以下は、js を使用して実装された配...
1. ウィンドウ -> 設定を選択してEclipseの設定パネルを開きます。 2. 「設定」ウ...