検索
ホームページウェブフロントエンドjsチュートリアルJavaScript アニメーションの実装に関する詳細な紹介

はじめに

現在、多くのページにアニメーションエフェクトが使用されています。適切なアニメーション効果はページの美しさをある程度向上させることができ、即効性のあるアニメーションはページの使いやすさを向上させることができます。

ページアニメーションを実装するには 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(&#39;el&#39;),
      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 サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
舞台裏:JavaScriptをパワーする言語は何ですか?舞台裏:JavaScriptをパワーする言語は何ですか?Apr 28, 2025 am 12:01 AM

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

PythonとJavaScriptの未来:傾向と予測PythonとJavaScriptの未来:傾向と予測Apr 27, 2025 am 12:21 AM

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

Python vs. JavaScript:開発環境とツールPython vs. JavaScript:開発環境とツールApr 26, 2025 am 12:09 AM

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

JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

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

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

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

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

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

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

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

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

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

See all articles

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

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

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

SublimeText3 英語版

SublimeText3 英語版

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SecLists

SecLists

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