はじめに
現在、多くのページにアニメーションエフェクトが使用されています。適切なアニメーション効果はページの美しさをある程度向上させることができ、即効性のあるアニメーションはページの使いやすさを向上させることができます。
ページアニメーションを実装するには 2 つの方法があります。 1 つは、JavaScript を操作して CSS スタイルを間接的に操作し、update ごとに更新する方法で、もう 1 つは CSS を通じてアニメーションを直接定義する方法です。 2 番目の方法は、CSS3 が成熟した後に広く採用されました。この記事では、最初の方法の原理と実装について説明します。
JavaScript アニメーション実装原理
まず第一に、アニメーション時間プロセスとアニメーション効果プロセスという 2 つの重要な概念を知る必要があります。
アニメーション時間プロセスは、[0, 1] の間の数値で表されるアニメーションの完了を指します。アニメーションが タイム スタンプt1
で開始され、t2
で終了すると仮定します。現在のタイムスタンプは t
であり、アニメーションの現在の進行状況は次のとおりです。アニメーションは (t-t1)/(t2-t1)
です。理解できない場合は、紙とペンで描いてみることをお勧めします。この概念を理解することは、この記事を理解する上で非常に重要です。 t1
开始,要在t2
结束,当前时间戳为t
,那么该动画目前的时间进程为(t-t1)/(t2-t1)
。如果你不能理解,我建议你用纸笔画出来。理解这一概念对理解本文至关重要。
动画效果进程指被动画的属性值当前的增量。假设我们要将#el
元素的CSS <a href="http://www.php.cn/wiki/907.html" target="_blank">left</a>
属性从100px
变到200px
,当前已经变到了130px
,那么该动画目前的效果进程为130px - 100px = 30px
。
假设动画时间进程和动画效果进程都是线性的。那么如果知道了动画时间进程,一定可以得到动画效果进程。
根据这个解释,我们很快可以编写出一个线性的动画。
(function() { var begin, // 开始动画的时间 el, start, end, duration; var INTERVAL = 13; function now() { return (new Date).getTime(); } /** * 执行一步动画(更新属性) */ function _animLeft() { var pos = (now() - begin) / duration; if (pos >= 1.0) { return false; } return !!(el.style.left = start + (end - start) * pos); } /** * 对一个DOM执行动画,left从_start到_end,执行时间为 * _duration毫秒。 * * @param {object} _el 要执行动画的DOM节点 * @param {integer} _start left的起始值 * @param {integer} _end left的最终值 * @param {integer} _duration 动画执行时间 */ function animLeft(_el, _start, _end, _duration) { stopped = false; begin = now(); el = _el; start = _start; end = _end; duration = _duration || 1000; var step = function() { if (_animLeft()) { setTimeout(step, INTERVAL); } }; setTimeout(step, 0); } window.animLeft = animLeft; })(); animLeft( document.getElementById('el'), 100, 200 )
JSBin
easing
很多时候,我们需要的动画并非线性的。所谓非线性,从直观上看,就是动画速度随着时间会产生变化。那么如何实现变速的动画呢?
由前所述,我们知道通过控制动画的时间进程就相当于控制动画的效果进程。随着真实世界的时间进程推移,动画的时间进程跟着推移,从而控制动画的效果进程推移。那么,我们可以通过修改真实世界的时间进程和动画的时间进程间的映射关系,从而控制动画进程。如果你感到困惑,没关系,请看下图:
这是线性动画中,真实世界的时间进程和动画进程的映射关系。接下来,我们将其进行变换
这条曲线实际上是函数y = x * x
的图像。可以看到,两个曲线的定义域和值域并没有变化。曲线的斜率就是动画的速率。接下来我们将两张图重叠在一起做一个对比。
在真实世界的时间进行到x0
的时候,动画进程原本应该进行到y0
,在进行变换之后,只进行到y1
。到最后,百川归海,两条线交汇于点(1, 1)。这里,y = x * x
アニメーション効果プロセスとは、アニメーション化された 属性 値
#el
要素の CSS を <a href="http://www.php.cn/wiki/907.html" target="_blank"> に変更するとします。 left<p> code> 属性が <code>100px
から 200px
に変更され、現在は 130px
に変更され、アニメーションの現在のエフェクト プロセスが変更されます。 130px - 100px = 30px
です。
アニメーション時間の進行とアニメーション効果の進行は両方とも線形であると仮定します。したがって、アニメーション時間プロセスを知っていれば、アニメーション効果プロセスを確実に取得できます。
この説明によると, リニアアニメーションを素早くプログラムできます。
function ease(time) { return time * time; } /** * 执行一步动画(更新属性) */ function _animLeft() { var pos = (now() - begin) / duration; if (pos >= 1.0) { return false; } pos = ease(pos); return !!(el.style.left = (start + (end - start) * pos) + "px"); }
JSBin
イージング
多くの場合、必要なアニメーションは線形ではありません。いわゆる非線形性とは、直感的に言えば、アニメーションの速度が時間とともに変化することを意味します。では、可変速アニメーションを実装するにはどうすればよいでしょうか?


y = x * x
画像です。 2 つの曲線の定義領域と値の範囲が変わっていないことがわかります。曲線の傾きがアニメーションの速度になります。次に、2 つの写真を重ねて比較してみます。 🎜🎜
x0
に達すると、アニメーション処理は本来 y0
に進むはずですが、変換後は y1
にのみ進みます。最終的に、すべての川は海に戻り、2 つの線は点 (1, 1) で合流します。ここで、y = x * x
はイージング関数 🎜 です。 🎜🎜アニメーションを非線形にするために上記の例を変更してみましょう。 🎜jQuery.easing = { linear: function( p ) { return p; }, swing: function( p ) { return 0.5 - Math.cos( p * Math.PI ) / 2; } };🎜JSBin🎜🎜🎜jQuery🎜のコードにそのような関数が見られます。 🎜
jQuery.easing.myEasing = function( p ) { return ... }🎜 したがって、jQuery.easing にイージング関数を追加して、jQuery に新しいアニメーション レート制御メソッドをサポートさせることができます。イージング関数の定義域と値の範囲は [0, 1] である必要があることに注意してください。 🎜rrreee🎜概要🎜🎜JavaScriptアニメーションは基本的にCSSを操作してアニメーションを実行します。アニメーションの時間の進行によって、アニメーションのエフェクトの進行が決まります。現実世界の時間経過とアニメーションの時間経過との関係を操作することで、線形アニメーションを非線形アニメーションに変換できます。 🎜🎜🎜
以上がJavaScript アニメーションの実装に関する詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

Dreamweaver Mac版
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

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

ホットトピック









