モバイルデバイスでのフリーズ問題に対する CSS3 ソリューション (アニメーション パフォーマンスの最適化)

モバイルデバイスでのフリーズ問題に対する CSS3 ソリューション (アニメーション パフォーマンスの最適化)

1. CSS、jQuery、Canvasを使用してアニメーションを作成する

1. キャンバス

利点: パフォーマンスが良好、強力、ほとんどのブラウザをサポート (IE6、IE7、IE8 を除く)、描画したグラフィックを .png または .jpg グラフィックとして直接保存できます。

デメリット: HTML に依存し、スクリプトを通じてのみグラフィックを描画でき、アニメーションを実装するための API がありません (イベントとタイマーの更新に依存)。プログラムによってキャンバス上に表示されるテキストは実際にはビットマップであるため、検索クローラーはテキストを完全に無視します。テキストコンテンツもスクリーンリーダーでは読み取れません。

2.css3

利点: シンプルでコンテンツから分離されており、CSS アニメーションはレイアウトとペイントをトリガーしません (これらのプロパティを変更してもレイアウトとペイントはトリガーされません: backface-visibility、opacity、perspective、perspective-origin、transform)。

デメリット: ブラウザの互換性の問題があり、Android フォンがフリーズする可能性があり、タイプセッティング エンジンによって制限され、ページ全体の DOM 構造に密接に関連しています。

3. クエリ

利点: 互換性の問題がない

デメリット: すべてのフレームを再描画して再合成する必要がある (非常に時間がかかります)。

要約: モバイル アニメーション効果に関しては、CSS3 アニメーションを使用する方が jQuery アニメーションを使用するよりもはるかに効率的です。これは特に Android スマートフォンに当てはまります。そのため、モバイルアニメーションは CSS3 アニメーションよりも優先され、jQuery はアプリケーションロジックを単純に処理するためにのみ使用できます。 CSS3 アニメーションは、コンテンツのレイアウトに特殊効果を追加するための汎用的なソリューションですが、パフォーマンスの低いモバイル ブラウザーではレイアウトのパフォーマンスが制限され、目的の効果が得られない場合があります。ゲームなど、高いパフォーマンスが求められる特定のシナリオでは、キャンバスを使用するとパフォーマンスが大幅に向上します。

2. CSS3はモバイルデバイス上でフリーズする問題がある

CSS3 で作成されたアニメーションは iOS では 66% 実行されますが、Android では遅延が発生する場合があります。以下の点から問題を探してみるとよいでしょう。

a. レイアウトに影響を与えるかどうか
その場合は、ドキュメント ツリーに影響を与えないようにし、リフローを減らすために、アニメーション要素を可能な限り絶対的または固定的にします。

b. ハードウェアアクセラレーションを有効にするかどうか
「CSS3 アニメーションの使用」と「ハードウェア アクセラレーションの有効化」は異なるものですが、前者は後者につながる可能性があります。
Webkit には、ハードウェア アクセラレーションを有効にする魔法の万能薬があります: opacity: 1; または -webkit-backface-visibility: hidden;。

c. コストの高い属性はありますか (CSS シャドウ、グラデーション、background-attachment: fixed など)
可能であれば、写真もオプションです。これは、空間と時間を交換する最適化とみなすことができます。

d. 再描画領域がある場合は、アニメーション領域を縮小する必要があります。このステップでは最適化は制限されています。

e. アニメーションを生成するには、transform を使用するようにし、height、width、margin、padding などは使用しないようにします。以下の例 1 と 2 を参照してください。

PS: トランスフォームを使用すると、ブラウザはこの要素のビットマップを 1 回生成し、アニメーションの開始時に GPU に送信して処理するだけで済みます。その後、ブラウザはレイアウト、描画、またはビットマップの送信操作を実行する必要がなくなります。したがって、ブラウザは GPU を最大限に活用して、さまざまな位置にビットマップをすばやく描画したり、回転やスケーリングを実行したりできます。つまり、変換アニメーションは GPU によって制御され、ハードウェア アクセラレーションをサポートし、ソフトウェア レンダリングは必要ありません。

3. アニメーション処理中にちらつきが発生する(通常はアニメーションの開始時に発生します)

解決:

.キューブ{

   -webkit-backface-visibility: 非表示;

   -moz-backface-visibility: 非表示;

   -ms-backface-visibility: 非表示;

   背面の可視性: 非表示;

   -webkit-perspective: 1000;

   -moz-perspective: 1000;

   -ms-パースペクティブ: 1000;

   視点: 1000;

   /* その他の変換プロパティはここに記載 */

}

Webkitベースのブラウザでは、もう1つの効果的な方法は

.キューブ{

   -webkit-transform: translate3d(0, 0, 0);

   変換: translate3d(0, 0, 0);

   -ms-transform: translate3d(0, 0, 0);

   変換: translate3d(0, 0, 0);

  /* その他の変換プロパティはここに記載 */

}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  HTML でスクロールバーを使用する際のヒントを共有する

>>:  MySQLがブール型を返すいくつかの状況について簡単に説明します。

推薦する

CSSの固定位置属性の詳細な説明

モバイル アプリを開発する場合、Web サイトが特定の高さまでスクロールしたときにコンテンツの一部を...

Docker+DockerCompose を使用して Web アプリケーションをカプセル化する方法

目次テクノロジースタックバックエンドビルドAPIフロントエンドウェブ構築ゲートウェイ建設ゲートウェイ...

Linux で MySQL パスワードを忘れた場合の解決策

問題は次のとおりです。mysql -uroot -p コマンドを入力しましたが、パスワードを忘れてし...

Linux での syslogd および syslog.conf ファイルの解釈

1: syslog.conf の概要異なるタイプの Unix の場合、標準の UnixLog システ...

ElementUI ページネーション コンポーネントの使い方 Vue でのページネーション

ElementUIページングコンポーネントPagination in Vueの使用は参考になります。...

CentOS 環境で NFS リモート ディレクトリ マウントを使用する手順の紹介

目次1. NFS の概要2. NFS構築1. NFSサーバーの構築2. NFSクライアントの構築3....

フラッシュプラグインを使用してPCのカメラを呼び出し、TMLページに埋め込む方法

序文この記事を書いた主な理由は、チームリーダーが、ブラウザを使用してコンピューターのカメラを呼び出し...

Vue3のdefineComponentの役割についての簡単な説明

目次defineComponent オーバーロード関数開発実務defineComponent 関数は...

MySQL 集計関数のソート

目次MySQL 結果のソート - 集計関数環境クエリ結果の並べ替えクエリのグループ化と集約生徒の平均...

TinyEditorはシンプルで使いやすいHTML WYSIWYGエディタです

数日前、国産の XHTML エディタを紹介しました。今日は、有名な海外の Web デザイン ブログl...

MySQL テーブルと列のコメントの概要

コードと同様に、テーブルや列にコメントを追加して、他のユーザーがその機能を理解できるようにすることが...

vuex ベースのショッピングカート機能の実装

この記事の例では、ショッピングカート機能を実装するためのvuexの具体的なコードを参考までに共有して...

Vue マルチページ構成の詳細

目次1. 複数ページの違い2. SPAとMPA 3. Vue Cli スキャフォールディング構成1....

VScode設定のリモートデバッグLinuxプログラムの問題を解決する

VScode リモートデバッグ Linux プログラムの問題について見てみましょう。具体的な内容は以...

@media レスポンシブ CSS を使用してさまざまな画面に適応する例

定義と使用@media クエリを使用すると、さまざまなメディア タイプに異なるスタイルを定義できます...