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

CSS3を使用して60 FPSモバイルアニメーションを実現します

Feb 19, 2025 pm 12:54 PM

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 までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Googleフォント変数フォント Googleフォント変数フォント Apr 09, 2025 am 10:42 AM

Google Fontsが新しいデザイン(ツイート)を展開したようです。最後の大きな再設計と比較して、これははるかに反復的です。違いをほとんど伝えることができません

HTML、CSS、JavaScriptを使用してアニメーションカウントダウンタイマーを作成する方法 HTML、CSS、JavaScriptを使用してアニメーションカウントダウンタイマーを作成する方法 Apr 11, 2025 am 11:29 AM

プロジェクトにカウントダウンタイマーが必要だったことはありますか?そのようなことのために、プラグインに手を伸ばすのは自然なことかもしれませんが、実際にはもっとたくさんあります

HTMLデータ属性ガイド HTMLデータ属性ガイド Apr 11, 2025 am 11:50 AM

HTML、CSS、およびJavaScriptのデータ属性について知りたいと思っていたことはすべて。

SASSをより速くするための概念の証明 SASSをより速くするための概念の証明 Apr 16, 2025 am 10:38 AM

新しいプロジェクトの開始時に、SASSコンピレーションは瞬く間に起こります。これは、特にbrowsersyncとペアになっている場合は素晴らしい気分です。

SVGでタータンパターンを生成する静的サイトを作成する方法 SVGでタータンパターンを生成する静的サイトを作成する方法 Apr 09, 2025 am 11:29 AM

タータンは、スコットランド、特にファッショナブルなキルトに通常関連する模様のある布です。 Tartanify.comでは、5,000を超えるTartanを集めました

WordPressテーマでVueコンポーネントを構築する方法 WordPressテーマでVueコンポーネントを構築する方法 Apr 11, 2025 am 11:03 AM

インラインテンプレートディレクティブにより、既存のWordPressマークアップに対する進行性の強化として、リッチVUEコンポーネントを構築できます。

PHPはテンプレートのA-OKです PHPはテンプレートのA-OKです Apr 11, 2025 am 11:04 AM

PHPテンプレートは、多くの場合、サブパーコードを促進するために悪いラップを取得しますが、そうである必要はありません。 PHPプロジェクトが基本を実施する方法を見てみましょう

静的フォームプロバイダーの比較 静的フォームプロバイダーの比較 Apr 16, 2025 am 11:20 AM

ここでは、「静的フォームプロバイダー」という用語を埋めてみましょう。あなたはあなたのHTMLを持ってきます

See all articles