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+canvasでタイムラインを描く方法

この記事では、参考までにvueキャンバスのタイムライン描画の具体的なコードを紹介します。具体的な内容...

VMware は Centos7 システムの PXE+kickstart 無人インストールの詳細なプロセスを実装します

目次PXEはサーバーの無人バッチ展開を実装します1. PXEの概要1.1 PXEとは何か1.2 キッ...

MySQL設定ファイルを変更できない問題の解決方法(Win10)

他の人のために解決した問題を記録します。問題の説明MySQLのバージョンは5.7、オペレーティングシ...

Linux (Centos7) での redis5 クラスターの構築と使用方法の詳細な説明

目次1. 簡単な説明2. クラスターを作成する手順2.1. ディレクトリを作成する2.2. ソースコ...

iframe ページパラメータの文字化けの問題について議論

非常に珍しいパラメータ文字化けの問題に遭遇しました。まずページを見てみましょう写真に示すように、月次...

nginx ロケーション優先度の詳細な説明

場所表現タイプ~ は大文字と小文字を区別して通常の一致を実行することを示します~*は大文字と小文字を...

レンダリング関数と JSX の詳細

目次1. 基本2. ノード、ツリー、仮想DOM 1. 仮想DOM 3. createElementパ...

いくつかの面接の質問を使ってJavaScriptの実行メカニズムを調べる

目次前の単語同期と非同期前菜プレートを追加マクロタスク マイクロタスク約束しましょうタイマーを追加す...

Vue ダイナミック バインディング アイコンの完全な手順

0 アイコンと画像の違いアイコンは文字であり、画像はバイナリ ストリームです。つまり、画像はアイコン...

React でカレンダー コンポーネントを構築するためのステップ バイ ステップ ガイド

目次事業背景テクノロジーの活用技術的な問題デザインのアイデア😱 困惑と苦痛に満ちた顔🙄考え始める🌲デ...

MySQL 8.0.11 圧縮バージョンを Windows 10 にインストールするための詳細なチュートリアル

最近コンピュータを再インストールした後、最新バージョンのみをインストールするという強迫観念に基づいて...

CSSは左固定と右適応のレイアウト方法を実現します

1. フローティングレイアウト1. 最初に固定幅の div をフロートさせます。ドキュメントフローか...

Dockerを使用してgitlabコミュニティの中国語版を構築する詳細なプロセスを教えます

1. Docker Composeを使用して起動を構成するDocker Compose を知らない場...

MySQL PXC は IST 送信のみで新しいノードを構築します (推奨)

需要シナリオ: 既存の PXC 環境には大量のデータがあります。新しく購入したサーバーをこのクラスタ...