CSS3を使用してトランジションとアニメーション効果を実現する

CSS3を使用してトランジションとアニメーション効果を実現する

JS アニメーションの代わりに CSS アニメーションを使用する必要があるのはなぜですか?

JavaScript の効率が低い主な理由は、DOM の操作とページアニメーションの使用の 2 つです。

通常、視覚的なアニメーション効果を実現するために、DOM と CSS を頻繁に操作します。これには、JS の効率が低下する原因となる 2 つの要因が含まれます。DOM と CSS を頻繁に操作すると、ブラウザは常にリフローと再描画を実行します。PC 版ブラウザでは、ブラウザの使用可能メモリが比較的大きいため、ユーザーはページ アニメーションによるリペイントとリフローを肉眼でほとんど確認できないため、エンジニアはアニメーションによるパフォーマンスの問題をあまり考慮する必要がありません。ただし、モバイル デバイスでは状況が大きく異なります。モバイル デバイスの組み込みブラウザに割り当てられるメモリは、PC 版ブラウザほど大きくありません。現在、CSS3 を最もよくサポートしているのは Webkit ブラウザです。Webkit カーネルを搭載したブラウザの中で、1 番目は Safari、2 番目は Chrome です。

JS シミュレーション アニメーションの代わりに CSS3 アニメーションを使用する利点:

  • JS メイン スレッドを占有しません。
  • ハードウェアアクセラレーションを活用できます。
  • ブラウザはアニメーションを最適化できます(要素が表示されていない場合はアニメーションを表示せず、FPSへの影響を軽減します)

CSS3 アニメーションは、2D、3D、および通常のアニメーション属性インターフェイスを提供します。ページ上の任意の要素の任意の属性で機能します。CSS3 アニメーションは C 言語で記述され、システムレベルのアニメーションです。

jsアニメーションを使用するかcss3アニメーションを使用するかは、開発者がさまざまなニーズに基づいてさまざまな選択を行う必要がありますが、基本的な原則に従う必要があります。2Dアニメーションを実行する必要がある場合は、CSS3トランジションまたはアニメーションを使用する必要があります。

CSS3 アニメーションと JavaScript シミュレーション アニメーションの違いは次のとおりです。

  • CSS 3Dアニメーションはjsでは実装できません
  • CSS3 3D アニメーションは、CSS3 の非常に強力な機能です。3 次元空間で動作するため、js は CSS3 のように 3D アニメーションをシミュレートできません。
  • CSS 2D マトリックス アニメーションは、margin、left、top を使用する js マトリックス アニメーションよりも効率的です。
  • CSS3 の 2D アニメーションは、2D マトリックス Transform の変化を指します。もちろん、js では変形アニメーションは実行できません。たとえば、座標アニメーションの場合、CSS3 変換を使用して translateXY アニメーションを実行すると、js の position left および position right よりも約 700 mm 高速になります。また、js アニメーションよりも視覚的にずっとスムーズです。
  • CSS3 の他の一般的なアニメーション プロパティの効率は、js でシミュレートされたアニメーションの効率よりも低くなります。
  • ここでの通常のアニメーションプロパティは、高さ、幅、不透明度、境界線の幅、色を指します。

CSS3 プロパティ

2D変換

CSS3 変換を使用すると、要素を移動、拡大縮小、回転、伸縮、または長くすることができます。

変換属性は2Dまたは3Dに変換される要素に適用されます。

transform-origin属性、変換された要素の位置を設定する

1. translate() メソッドは、左 (X 軸) と上 (Y 軸) の位置で指定されたパラメータに従って、現在の要素の位置から移動します。

div {
  変換: translate(50px,100px);
  -webkit-transform: translate(50px,100px); /* Safari と Chrome */
}

2.rotate() メソッドは、要素を指定された度数で時計回りに回転します。負の値も許可されており、要素は反時計回りに回転します。

div {
  変換: 回転(30度);
  -webkit-transform: rotate(30deg); /* Safari と Chrome */
}

3. scale() メソッドでは、幅 (X 軸) と高さ (Y 軸) のパラメータに応じて要素のサイズが増減します。

div {
    -webkit-transform: scale(2,3); /* Safari /
    transform: scale(2,3); / 標準構文*/
}

4.skew([,]) には、それぞれ X 軸と Y 軸の傾斜角度を表す 2 つのパラメータ値が含まれます。2 番目のパラメータが空の場合、デフォルト値は 0 です。負のパラメータは、反対方向への傾斜を示します。

div {
    変換: skew(30deg,20deg);
    -ms-transform:skew(30deg,20deg); /* IE 9 /
    -webkit-transform: skew(30deg,20deg); / Safari および Chrome */
}

3D変換

 translate3d(x,y,z) は 3D 変換を定義します。
translateX(x)は、X軸の値のみを使用して3D変換を定義します。
translateY(y) は、Y 軸の値のみを使用して 3D 変換を定義します。
translateZ(z) は、Z 軸の値のみを使用して 3D 変換を定義します。
scale3d(x,y,z) は 3D スケーリング変換を定義します。
scaleX(x) は、x 軸に沿った値を指定して 3D スケーリング変換を定義します。
scaleY(y) は、Y 軸に沿った値を指定して 3D スケーリング変換を定義します。
scaleZ(z) は、z 軸に沿った値を指定して 3D スケーリング変換を定義します。
rotate3d(x,y,z,angle) は 3D 回転を定義します。
rotateX(angle) は、X 軸を中心とした 3D 回転を定義します。
rotateY(angle) は、Y 軸を中心とした 3D 回転を定義します。
rotateZ(angle) は、Z 軸を中心とした 3D 回転を定義します。
perspective(n) 3D 変換された要素の透視ビューを定義します。

CSS3 トランジション

transition ショートハンド プロパティ。1 つのプロパティで 4 つの transition プロパティを設定するために使用されます。
transition-property トランジションが適用される CSS プロパティの名前を指定します。
transition-duration は、遷移効果にかかる時間を定義します。デフォルトは0です。遷移期間: 5秒;
transition-timing-function は、トランジション効果のタイミング カーブを指定します。デフォルトは「ease」です。
    linear は、同じ速度で開始および終了する遷移効果を指定します (cubic-bezier(0,0,1,1) に相当)。
    easy は、ゆっくり始まり、その後加速し、そしてゆっくり終わる遷移効果を指定します (cubic-bezier(0.25,0.1,0.25,1))。
    easy-in は、ゆっくり始まる遷移効果を指定します (cubic-bezier(0.42,0,1,1) に相当)。
    easy-out は、ゆっくり終了する遷移効果を指定します (cubic-bezier(0,0,0.58,1) に相当)。
    easy-in-out は、ゆっくりと開始および終了する遷移効果を指定します (cubic-bezier(0.42,0,0.58,1) に相当)。
    cubic-bezier(n,n,n,n) は、cubic-bezier 関数で独自の値を定義します。可能な値は0から1までの数値です。
transition-delay は、遷移効果がいつ開始するかを指定します。デフォルトは0です。遷移遅延: 2秒;

CSS3アニメーション

@keyframes はアニメーションを指定します。    
animation は、animation-play-state プロパティを除くすべてのアニメーション プロパティのショートカット プロパティです。    
animation-name は、@keyframes アニメーションの名前を指定します。    
animation-duration は、アニメーションが 1 サイクルを完了するのにかかる秒数またはミリ秒数を指定します。デフォルトは0です。    
animation-timing-function は、アニメーションの速度曲線を指定します。デフォルトは「ease」です。    
animation-fill-mode は、アニメーションが再生されていないとき (アニメーションが完了したとき、またはアニメーションの再生が開始されない遅延があるとき) に要素に適用するスタイルを指定します。    
animation-delay はアニメーションがいつ開始するかを指定します。デフォルトは0です。    
animation-iteration-count はアニメーションを再生する回数を指定します。デフォルトは 1 です。
animation-direction は、次のサイクルでアニメーションを逆方向に再生するかどうかを指定します。デフォルトは「通常」です。
animation-play-state は、アニメーションが実行中か一時停止中かを指定します。デフォルトは「実行中」です。

要約する

上記は、CSS3 を使用してトランジション効果とアニメーション効果を実現する方法についてご紹介したものです。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

<<:  選択/フォーカス時にすべてのオプションをリストする現在のより良い方法

>>:  Vueのトランジションとアニメーションの深い理解

推薦する

vue+antv でレーダーチャートを実装するためのサンプルコード

1. 依存関係をダウンロードするnpm インストール @antv/データセットnpm インストール ...

MySQL、Oracle、SQL Server のページングクエリ例の分析

最近、Oracle、MySQL、SQL Server 2005 のデータ ページング クエリについて...

JS を使用して HTML で回転するクリスマスツリーを実装する

<!DOCTYPE ヘムル パブリック> <html> <ヘッド&g...

Vue ショッピングカートのケーススタディ

目次1. ショッピングカートの例2. コードの実装3. まとめ1. ショッピングカートの例一連の学習...

MySQLの共同クエリ最適化メカニズムの詳細な説明

目次MySQL フェデレーテッド クエリ実行戦略。実行計画フェデレーテッドクエリオプティマイザーMy...

MySQL シリーズ 10 同時実行制御を実装するための MySQL トランザクション分離

目次1.同時アクセス制御2. 取引1. トランザクションは ACID 原則に従います。 2. トラン...

Dockerfileの指示と基本構造の説明

Dockerfile を使用すると、ユーザーはカスタム イメージを作成できます。基本構造Docker...

mysql init_connect に関するいくつかの重要なポイントの要約

init_connectの役割init_connect は通常、接続が来たときに、自動コミットを 0...

Vueの最初のプログラムを書くための勉強ノート

目次1. HTMLを書く、最初のVueプログラムビューテンプレートとデータに注意してください決定ルー...

エレメントアバターアップロード練習

この記事は、Element公式サイトとQiniu Cloud公式サイトを使用しています。 eleme...

Ubuntu 18.04 (物理マシン) で OpenWRT 開発環境を構成する方法

1. 仮想マシン(物理マシン)をインストールする仮想マシンまたは物理マシンにインストールできます。 ...

Linux環境でログファイルを表示するコマンドの詳細な説明

目次序文1. catコマンド: 2. moreコマンド: 3. lessコマンド: 4. headコ...

HTMLデザインパターンの日々の勉強ノート

HTML デザインパターン学習ノート今週は主にHTMLデザインパターンを学びました。学習内容をまとめ...

Vue のクロスドメイン問題の処理と解決策の概要

ネットワークリクエストを送信すると、次の保存情報が表示されます。おめでとうございます。ドメインを越え...

あまり使われていない、または誤解されている HTML タグ 10 個

ここでは、あまり使われていない、または誤解されている 10 個の HTML タグを紹介します。あまり...