現在、アニメーションプロジェクトを始めています。プロジェクトでは、40000を超えるdiv
sを使用し、それらを繰り返しアニメーション化します。 div
sのいずれかがパッシブ状態にある(つまり、少なくとも2秒間アニメーション化されていない)場合、アニメーションのパフォーマンスを向上させるためにそれらを表示しません。
問題は、どのcssプロパティがこれに最も適しているかということです。
.passive1{
display:none
}
.passive2{
visibility:hidden;
}
.passive3{
opacity:0;
}
また、fps、gpu使用量などのレンダリングパフォーマンスを測定するにはどうすればよいですか?
それらはすべて要素を非表示にしますが、スペースを占有してクリックを消費するかどうかは異なります
+--------------------+----------------+-----------------+
| Property | occupies space | consumes clicks |
+--------------------+----------------+-----------------+
| opacity: 0 | ✓ | ✓ |
+--------------------+----------------+-----------------+
| visibility: hidden | ✓ | ✗ |
+--------------------+----------------+-----------------+
| display: none | ✗ | ✗ |
+--------------------+----------------+-----------------+
✓: yes
✗: no
そして、クリックを消費すると言うと、ondblclick、onmousedown、onmousemoveなどの他のポインターイベントも消費します。
本質的に、「可視性:隠された」は、「不透明度:0」と「ポインターイベント:なし」の組み合わせのように動作します。
display:none
divはフローから取り出されるため、その位置を計算する必要はありません。
そうは言っても、40000 divはおかしく聞こえます。 HTML5キャンバスやSVGなどの代替手段を検討しましたか?
display:none
は要素全体を非表示にし、レイアウトスペースから削除しますが、visibility:hidden
は要素を非表示にしますが、以前と同じスペースを占有します。
透明度またはフェード効果を作成する場合は、不透明度を使用できます。
Display:noneまたはvisibility:hiddenを使用すると、ほとんどのブラウザーでペイントとレイアウトがトリガーされるため、Perfomamceが問題になります。つまり、これら2つの変更が行われるたびにブラウザーがビューポートを再描画します。それでも期待どおりのパフォーマンスではない場合、webglチェックでdivをレンダリングするhtml-glというライブラリを使用してwebglを試すことができます https://github.com/PixelsCommander/HTML-GL
いつか可視性と不透明度を一緒に使用して、クリックイベントを回避する効果を実現する
例えば.
画面から削除された通常の状態/要素:
visibility:hidden;
opacity:0;
transition: all .3s;
画面上のホバー状態/要素:
visibility:visible;
opacity:1;