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 を応援してくれることを願っています。 以下もご興味があるかもしれません:
|
<<: ウェブデザインにおける階層化インターフェースの設計経験
HTML CSS および JavaScript を使用して、プラス、マイナス、ゼロの 3 つのボタン...
Vueは宮殿グリッド回転抽選(CrossFireのxx転生に似ている)を実装しています。参考までに、...
目次方法 1: ルーティング メタ情報 (meta)方法 2: ルーティング テーブルを動的に生成す...
目次1. フックとは何ですか? 2. フックはなぜ現れるのでしょうか? 3. よく使われるフックは何...
1. よく使われるHTMLタグの最適化HTML は Web 編集者にとって基本的なスキルであるべきで...
Docker コンテナは、起動時に、たとえば ssh または apache デーモン サービスなどの...
インターネット時代が成熟するにつれて、オンライン広告の発展も加速しています。圧倒的な広告収入と完璧な...
HTML+CSS 1. WEB 標準と W3C の理解と知識<br /> タグを閉じ、小...
目次Docker の基本概念Docker インストール プロセス (Centos6.9)カーネルのア...
目次MySQL クエリツリー構造1. ツリー構造について2. MySQLでカスタム関数を定義する方法...
目次1. Vスロットの紹介2. 匿名スロット3. 名前付きスロット4. スコープ付きスロット5. 動...
この記事では、パスワードボックスの検証情報を実装するためのJavaScriptの具体的なコードを例と...
最近ブログに書いたのですが、プロジェクトリストの中に写真がたくさんあり、最初は読み込みが遅いので、ス...
序文この記事では、MySQL で特殊文字を使用してデータベース名を作成する方法について説明します。こ...
1. はじめに先ほど、フロントエンドの表示の問題について説明しました。では、前のコンテンツに戻って、...