検索
ホームページウェブフロントエンドCSSチュートリアルCSS3を使用して60 FPSモバイルアニメーションを実現します

Achieve 60 FPS Mobile Animations with CSS3

キーポイント

  • スムーズなモバイルアニメーションでは、クリティカルレンダリングパス(CRP)の合成ステップに注意を払う必要があり、transformopacityなどの属性を使用して、前のステップの負担を増やすことを避けます。
  • lefttoprightbottomtransformアニメーショントランジションの属性を使用しないでください。アニメーションの先頭にあるアニメーションは、以前にレイヤーの安定性を決定します。
  • 1秒あたり60フレームの安定したフレームレートを達成するには、GPUを使用してアニメーションをレンダリングし、will-change属性を介して別のレイヤーに要素を宣伝し、ブラウザーのレイアウトレンダリングまたは描画を避けます。

この記事は、もともとOutSystemsで公開されました。 SitePointをサポートしてくれたパートナーに感謝します。

モバイルアプリでアニメーションを簡単に作成できます。また、次のヒントをフォローすると、モバイルアプリでアニメーション化するのも簡単です。最近では、誰もがモバイルデバイスでCSS3アニメーションを使用していますが、多くの人が誤って使用しています。多くの場合、ベストプラクティスは開発者によって見落とされています。これは、これらの慣行がなぜ存在するのか、なぜ彼らがそれほど強くサポートされているのかを人々が理解していないためです。機器の仕様は非常に広いです。したがって、コードが最適化されていない場合、ほとんどのユーザーに標準のエクスペリエンスを提供します。覚えておいてください:一部のハイエンドのフラッグシップデバイスは強力ですが、世界のほとんどの人は、これらの高性能デバイスと比較して、LCD画面を備えたAbacusのようなデバイスを使用しています。 CSS3の力を正しく利用できるようにしたいと思います。これを行うには、最初に何かを理解する必要があります。

タイムラインの理解要素をレンダリングおよび処理するときにブラウザは何をしますか?このタイムラインは、キーレンダリングパスと呼ばれます

画像出典:www.csstriggers.com

スムーズなアニメーションを実現するには、前のステップの負担を増やすのではなく、合成ステップに影響するプロパティの変更に焦点を当てる必要があります。 Achieve 60 FPS Mobile Animations with CSS3

    スタイル
  1. ブラウザは、要素に適用されるスタイルの計算を開始します - スタイルを再計算します。 Achieve 60 FPS Mobile Animations with CSS3

  2. レイアウト
  3. 次のステップでは、ブラウザは各要素の形状と位置、つまりレイアウトを生成します。ここでは、ブラウザは幅や高さなどのページプロパティ、たとえばマージンまたはAchieve 60 FPS Mobile Animations with CSS3 lefttoprightを設定します。 bottom

  4. drawAchieve 60 FPS Mobile Animations with CSS3 ブラウザは各要素のピクセルをレイヤーに入力します。これは、これらのプロパティを指します:box-shadowborder-radiuscolorbackground-color

    など。
  5. Composition これは、アニメーションを実行する場所です。これは、ブラウザがすべてのレイヤーを画面に描画するときだからです。 Achieve 60 FPS Mobile Animations with CSS3 最新のブラウザは、transformおよびopacity属性を使用して、4つのスタイルの属性をうまくアニメーション化できます。

    • 位置 - transform: translateX(n) translateY(n) translateZ(n);
    • ズーム - transform: scale(n);
    • 回転 - transform: rotate(ndeg);
    • 不透明 - opacity: n;

1秒あたり60フレームを達成する方法

これを覚えておいてください、今度はあなたの袖を転がして一生懸命働く時です。 HTMLから始めましょう。非常にシンプルな構造を作成し、クラスにapp-menuに配置します。 layout

<div>
  <div></div>
  <div>
    <div></div>
  </div>
</div>

Achieve 60 FPS Mobile Animations with CSS3

間違った方法

.app-menu {
  left: -300px;
  transition: left 300ms linear;
}

.app-menu-open .app-menu {
  left: 0px;
  transition: left 300ms linear;
}
私たちが変更したプロパティを見ましたか?

lefttoprightbottomの属性を使用する必要があります。これらは、ブラウザが毎回レイアウトパスを実行するように強制し、すべての要素の子要素に影響するため、スムーズなアニメーションを作成しません。結果は次のとおりです

Achieve 60 FPS Mobile Animations with CSS3

このアニメーションは十分にスムーズではありません。 DevToolsのタイムラインを使用して、舞台裏で何が起こっているのかを確認しました。結果は次のとおりです。

Achieve 60 FPS Mobile Animations with CSS3 緑の領域は、アニメーションをレンダリングするのにかかる時間を示します。このデータは、不規則なフレームレートとパフォーマンスの低下を示しています。 「緑のバーはfpsを意味します。ハイバーはアニメーションが60 fpsでレンダリングされることを意味します。低いバーは60 fps未満を意味します。そのため、理想的には、緑のバーが常にタイムライン全体で高く維持されたいです。赤いバーもst音を意味します。進行状況を測定する別の方法は、これらの赤いバーを排除することです。

変換を使用して

.app-menu {
  -webkit-transform: translateX(-100%);
  transform: translateX(-100%);
  transition: transform 300ms linear;
}
.app-menu-open .app-menu {
  -webkit-transform: none;
  transform: none;
  transition: transform 300ms linear;
}
属性は、レイアウトではなく、合成ステップに影響します。ここでは、アニメーションが始まる前にレイヤーが安定していることをブラウザに通知します。そのため、アニメーションをレンダリングする際の障害物は少なくなります。

transform

これは、タイムラインが反映する方法です:

Achieve 60 FPS Mobile Animations with CSS3

結果が良くなり始め、フレームレートは安定しているようであるため、アニメーションはよりスムーズに実行されます。

gpu

でアニメーションを実行します

次に、次のレベルに進みましょう。本当にスムーズに実行するために、GPUを使用してアニメーションをレンダリングします。

<div>
  <div></div>
  <div>
    <div></div>
  </div>
</div>

一部のブラウザはまだフォールバックとしてtranslateZ()またはtranslate3d()を必要としますが、will-change属性は将来です。このプロパティは要素を別のレイヤーに促進するため、ブラウザはレイアウトのレンダリングまたは描画を検討する必要はありません。

Achieve 60 FPS Mobile Animations with CSS3

それがどれほどスムーズかわかりますか?タイムラインはこれを確認しています:

Achieve 60 FPS Mobile Animations with CSS3

アニメーションのフレームレートはより一定であり、アニメーションのレンダリング速度が高速になります。しかし、最初はまだ長いフレームがあります。最初は少しボトルネックがあります。最初に作成したHTML構造を覚えていますか? javascriptでapp-menudiv:

を制御する方法を見てみましょう
.app-menu {
  left: -300px;
  transition: left 300ms linear;
}

.app-menu-open .app-menu {
  left: 0px;
  transition: left 300ms linear;
}

ああ!ここでは、クラスをlayoutdivに追加することで問題を引き起こしています。これにより、ブラウザはスタイルツリーを再生します。これは、レンダリングパフォーマンスに影響します。

1秒あたり60フレームでのバターの滑らかな溶液

ビューポート領域の外にメニューを作成した場合はどうなりますか?隔離領域にメニューを置くことで、アニメーションに必要な要素のみに影響を与えることが保証されます。したがって、次のHTML構造を使用することをお勧めします

.app-menu {
  -webkit-transform: translateX(-100%);
  transform: translateX(-100%);
  transition: transform 300ms linear;
}
.app-menu-open .app-menu {
  -webkit-transform: none;
  transform: none;
  transition: transform 300ms linear;
}
次に、メニューのステータスをわずかに異なる方法で制御する必要があります。 javaScriptの

関数を使用して、アニメーションの最後に削除されたクラスのアニメーションを操作します。 transitionend

.app-menu {
  -webkit-transform: translateX(-100%);
  transform: translateX(-100%);
  transition: transform 300ms linear;
  will-change: transform;
}
すべてをまとめて結果を確認しましょう。これは完全なCSS3対応の例です。すべてが適切な場所にあります:

function toggleClassMenu() {
  var layout = document.querySelector(".layout");
  if(!layout.classList.contains("app-menu-open")) {
    layout.classList.add("app-menu-open");
  } else {
    layout.classList.remove("app-menu-open");
  }
}
var oppMenu = document.querySelector(".menu-icon");
oppMenu.addEventListener("click", toggleClassMenu, false);

Achieve 60 FPS Mobile Animations with CSS3

タイムラインは私たちに何を示していますか?

Achieve 60 FPS Mobile Animations with CSS3

それはすべて緑色のストリップです、ベイビー。実用的な例を見たいですか?ここをクリック。 (実際のリンクはここに挿入する必要があります)

(モバイルアニメーションに関するFAQセクションをここに追加する必要があります。コンテンツは元のドキュメントのFAQセクションと一致しています)

以上がCSS3を使用して60 FPSモバイルアニメーションを実現しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
@KeyFrames CSS:最も使用されているトリック@KeyFrames CSS:最も使用されているトリックMay 08, 2025 am 12:13 AM

@keyframesispopularduetoitsversitility andpowerincreatingsmoothcssanimations.keytricksinclude:1)defingsmoothtransitionsbetweenstates、2)AnimatingMultipleProperiessimally、3)3)bendorprefixesforbrows -compativity、4)組み合わせwithjavasfo

CSSカウンター:自動番号の包括的なガイドCSSカウンター:自動番号の包括的なガイドMay 07, 2025 pm 03:45 PM

csScounterSareSareusedTomageautomaticinginginwebdesigns.1)それらは、コンテンツ、リスト、および積極的なものを使用することができます

スクロール駆動型のアニメーションを使用したモダンなスクロールシャドウスクロール駆動型のアニメーションを使用したモダンなスクロールシャドウMay 07, 2025 am 10:34 AM

特にモバイルデバイスでは、スクロールシャドウを使用することは、Chrisが以前にカバーした微妙なUXです。 Geoffは、アニメーションタイムラインプロパティを使用する新しいアプローチをカバーしました。これがさらに別の方法です。

画像マップを再検討します画像マップを再検討しますMay 07, 2025 am 09:40 AM

簡単に復習してみましょう。画像マップはHTML 3.2に戻ります。ここで、最初にサーバー側マップを使用してから、マップとエリア要素を使用して画像上でクリック可能な領域を定義したクライアント側マップをマップしました。

開発者:すべての開発者の調査開発者:すべての開発者の調査May 07, 2025 am 09:30 AM

State of Devsの調査は現在、参加に対して開かれており、以前の調査とは異なり、コードを除くすべてをカバーしています:キャリア、職場だけでなく、健康、趣味などもあります。 

CSSグリッドとは何ですか?CSSグリッドとは何ですか?Apr 30, 2025 pm 03:21 PM

CSSグリッドは、複雑で応答性の高いWebレイアウトを作成するための強力なツールです。設計を簡素化し、アクセシビリティを向上させ、古い方法よりも多くの制御を提供します。

CSS Flexboxとは何ですか?CSS Flexboxとは何ですか?Apr 30, 2025 pm 03:20 PM

記事では、レスポンシブデザインにおけるスペースの効率的なアラインメントと分布のためのレイアウト方法であるCSS FlexBoxについて説明します。 FlexBoxの使用量を説明し、CSSグリッドと比較し、ブラウザのサポートを詳細に説明します。

CSSを使用してWebサイトを応答するにはどうすればよいですか?CSSを使用してWebサイトを応答するにはどうすればよいですか?Apr 30, 2025 pm 03:19 PM

この記事では、ビューポートメタタグ、柔軟なグリッド、流体メディア、メディアクエリ、相対ユニットなど、CSSを使用してレスポンシブWebサイトを作成するための手法について説明します。また、CSSグリッドとフレックスボックスを使用してカバーし、CSSフレームワークを推奨しています

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。