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のトランジションとアニメーションの深い理解

推薦する

MySQLにおける分散ロックの考え方をDBの助けを借りて詳しく説明します

序文スタンドアロン ロックであっても分散ロックであっても、共有データに基づいて現在の操作の動作を判断...

MySQL 最適化技術における Limit クエリの最適化分析

序文実際のビジネスでは、ページングは​​一般的なビジネス要件です。次に、制限クエリを使用します。制限...

Vueコンポーネントのルーティング強調表示問題の解決策

序文以前は、キャッシュを使用してルートを強調表示していました。すべてのルートをトラバースし、クリック...

MySQL パフォーマンス最適化のための魔法のツール、Explain の基本的な使用分析

導入MySQL には、SELECT ステートメントを分析し、開発者が最適化できるように SELECT...

Oracle10パーティションとMySQLパーティションの違いの詳細な説明

一般的に使用される Oracle10g パーティションは、範囲 (範囲パーティション)、リスト (リ...

ウェブサイトでページコンテンツや情報を直接コピーできない問題を解決する方法

最近では、多くのウェブサイトでは、ページ上の特定のコンテンツや情報を直接コピーすることは許可されてお...

CentOS7 に Redis をインストールして設定する方法

導入Redis を詳しく説明する必要はありません。インストールと設定を始めましょう。インストールソー...

Vueの子コンポーネントと親コンポーネントの詳細な分析

目次1. 親コンポーネントと子コンポーネント2. テンプレート分離書き込み1. テンプレートタグ2....

Vue での親子コンポーネント通信と、sync を使用して親子コンポーネント データを同期する

目次序文子コンポーネントは親コンポーネントにデータを渡す1. 親コンポーネントから子コンポーネントに...

VMware 上の CentOS に Oracle12.2 をサイレント インストールする詳細なグラフィック チュートリアル

環境準備: VMware+CentOS、jdk 1. システムディスクのサイズを確認する1. コマン...

MySQL 8.0 でのチェック制約の実装

みなさんこんにちは。私は技術の話ばかりして髪を切らない先生のトニーです。今回はMySQL 8.0で追...

IDEA2021 tomcat10 サーブレットの新しいバージョンの落とし穴

私が学習していたときに使用していたバージョンは比較的新しいものであり、インターネット上のチュートリア...

DockerにMySQLをインストールする方法

最近 Django を導入しましたが、MySQL を手動でインストールしたくなかったので、Docke...

Vue3 AST パーサー - ソースコード分析

目次1. AST抽象構文木を生成する2. ASTのルートノードを作成する3. 子ノードの解析4. テ...

この記事では、CSSのようなJSモジュールをインポートする方法を説明します。

目次序文構築可能なスタイルシートとは何ですか? CSSモジュールスクリプトの使用インポートアサーショ...