グラデーション グループ使用の隠れた危険性
グラデーション グループを使用するときに注意する必要がある隠れた危険性も 2 つあります。
まず、グラデーション グループは、アニメーションが完了するまで子コンポーネントの削除を遅らせます。これは、transitionName 属性で指定されたクラスに CSS を指定せずに ReactCSSTransitionGroup でコンポーネントのリストをラップした場合、コンポーネントは、レンダリングをやめようとしても削除されないことを意味します。
次に、グラデーション グループの各サブコンポーネントは一意のキー属性を設定する必要があります。グラデーション グループは、このプロパティを使用してコンポーネントが開始するか終了するかを決定します。そのため、key プロパティが設定されていない場合、アニメーションは実行されず、コンポーネントは削除できなくなります。
グラデーション グループに子要素が 1 つしかない場合でも、キー属性を設定する必要があることに注意してください。
インターバル レンダリング
CSS3 アニメーションを使用すると、パフォーマンスが大幅に向上し、コードがきれいになりますが、問題に対して常に適切なツールであるとは限りません。 CSS3 をサポートしていない古いブラウザとの互換性を提供する必要がある場合もあれば、スクロールバーの位置やキャンバスのペイントなど、CSS プロパティ以外のものをアニメーション化したい場合もあります。このような場合、インターバル レンダリングは要件を満たすことができますが、CSS3 アニメーションと比較してパフォーマンスがある程度低下します。
インターバル レンダリングの最も基本的なアイデアは、コンポーネントのステータス更新を定期的にトリガーして、アニメーション時間全体でコンポーネントが現在どの段階にあるかを明確にすることです。この状態値をコンポーネントの render() メソッドに追加すると、コンポーネントは各状態の更新によってトリガーされる再レンダリングで現在のアニメーション フェーズを正しく表すことができます。
このメソッドには複数の再レンダリングが含まれるため、通常は、不要なレンダリングを避けるために requestAnimationFrame と一緒に使用するのが最善です。ただし、requestAnimationFrame がサポートされていない、または利用できない場合は、よりインテリジェントではない setTimeout() にダウングレードすることが唯一の選択肢です。
requestAnimationFrame を使用してインターバル レンダリングを実装します
インターバル レンダリングを使用して div を画面の一方の側からもう一方の側に移動したいとします。これは、それにposition: ABS を追加し、左側または上部のプロパティを更新することで実現できます。時間が変わります。消費時間内の変更の合計量に基づいて、requestAnimationFrame を使用してこのアニメーションを実装すると、スムーズなアニメーションが得られるはずです。
以下は具体的な実装例です。
すごいです
この例では、animationCompleteTimestamp という値がコンポーネントの props に設定されており、この値は requestAnimationFrame() のコールバックで返されたタイムスタンプとともに使用され、どれだけのディスプレイスメントが残っているかを計算します。計算結果は this.state.position に保存され、render() メソッドはそれを使用して div の位置を決定します。
requestAnimationFrame は、componentWillUpdate() メソッドによって呼び出されるため、コンポーネントの props に変更がある (animationCompleteTimestamp が変更されるなど) たびにトリガーされます。これには、resolveAnimationFrame の this.setState() 呼び出しが含まれます。これは、animationCompleteTime-stamp が設定されると、現在時間がanimationCompleteTimestampを超えるまで、コンポーネントは後続の requestAnimationFrame メソッドを自動的に呼び出します。
この一連のロジックは、タイムスタンプに基づいてクリアする場合にのみ当てはまります。 animeCompleteTimestamp トリガー ロジックが変更され、this.state.position の値は現在の時刻とanimationCompleteTime-stamp の差に完全に依存します。このため、 render() メソッドは、スクロール バーの位置の設定を含む、さまざまなアニメーションで this.state.position を自由に使用できます。キャンバス上での描画とその中間状態。
インターバルレンダリングには setTimeout を使用してください
requestAnimationFrame は通常、最小限のパフォーマンスペナルティで最もスムーズなアニメーションを実現しますが、古いブラウザでは利用できず、思ったよりも頻繁に呼び出される可能性があります (そして予測可能性が低くなります)。このような場合には、setTimeout() を使用できます。
var Positioner = React.createClass({ getInitialState: function(){ return { position: 0 }; }, resolveAnimationFrame: function(){ var timestamp = new Date(); var timeRemaining = Math.max(0, this.props.animationCompleteTimestamp - timestamp); if (timeRemaining > 0){ this.setState({ position: timeRemaining }); } }, componentWillUpdate: function(){ if(this.props.animationCompleteTimestamp){ requestAnimationFrame(this.resolveAnimationFrame); } }, render: function(){ var divStyle = { left: this.state.position }; return <div style={divStyle}>This will animate!</div> }});
setTimeout() は明示的な時間間隔を受け入れ、requestAnimationFrame がこの時間間隔を独自に決定するため、このコンポーネントは使用する間隔を明確にするために追加の変数 this.props.timeoutMs に依存する必要があります。
概要
これらのアニメーション技術を使用すると、次のことが可能になります:
- CSS3 とグラデーション グループを使用して、状態変化中にグラデーション アニメーションを効率的に適用します。
- requestAnimationFrame を使用して、スクロールバーの位置やキャンバスの描画など、CSS の外側のものをアニメーション化します。
- requestAnimationFrame がサポートされていない場合は、setTimeout() メソッドにダウングレードします。

コードの読みやすさ、保守性、効率を向上させるため、一貫したHTMLエンコーディングスタイルは重要です。 1)低ケースタグと属性を使用します。2)一貫したインデントを保持し、3)シングルまたはダブルの引用符を選択して固執する、4)プロジェクトのさまざまなスタイルの混合を避け、5)きれいなスタイルやEslintなどの自動化ツールを使用して、スタイルの一貫性を確保します。

Bootstrap4にマルチプロジェクトカルーセルを実装するソリューションBootstrap4にマルチプロジェクトカルーセルを実装するのは簡単な作業ではありません。ブートストラップですが...

マウススクロールイベントの浸透の効果を実現する方法は? Webを閲覧すると、いくつかの特別なインタラクションデザインに遭遇することがよくあります。たとえば、DeepSeekの公式ウェブサイトでは、...

HTMLビデオのデフォルトの再生コントロールスタイルは、CSSを介して直接変更することはできません。 1. JavaScriptを使用してカスタムコントロールを作成します。 2。CSSを介してこれらのコントロールを美化します。 3. video.jsやPLYRなどのライブラリを使用すると、互換性、ユーザーエクスペリエンス、パフォーマンスを検討してください。プロセスを簡素化できます。

携帯電話でネイティブセレクトを使用する際の潜在的な問題は、モバイルアプリケーションを開発するときに、ボックスを選択する必要があることがよくあります。通常、開発者...

お使いの携帯電話でネイティブ選択を使用することの欠点は何ですか?モバイルデバイスでアプリケーションを開発する場合、適切なUIコンポーネントを選択することが非常に重要です。多くの開発者...

Three.JSとOctreeを使用して、部屋でのサードパーソンローミングの衝突処理を最適化します。 3つのjsでoctreeを使用して、部屋でサードパーソンローミングを実装し、衝突を追加してください...

モバイルデバイスでアプリケーションを開発する際に携帯電話でネイティブセレクトの問題は、ユーザーが選択を行う必要があるシナリオに遭遇することがよくあります。ネイティブセル...


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ホットトピック









