jQueryのanimateアニメーションメソッドとアニメーションキューイング問題の解決方法の詳しい説明

jQueryのanimateアニメーションメソッドとアニメーションキューイング問題の解決方法の詳しい説明

animate() アニメーションメソッド

  • 目的: CSS属性セットのカスタムアニメーションを実行する
  • 構文: $(selector).animate(styles,speed,easing,callback)

• パラメータ 1: 移動の終了位置の CSS プロパティ名とプロパティ値のコレクション。
• パラメータ 2: オプション。アニメーションの速度を指定します。デフォルトは「通常」です。その他の値、「遅い」、「通常」、「速い」は数値形式で、単位はミリ秒です。
• パラメータ 3: オプション。さまざまなアニメーション ポイントでアニメーション速度を設定するためのイージング関数を指定します。値には、swing (可変速度) と linear (一定速度) が含まれます。
• パラメータ 4: オプション。アニメーション関数の実行後に実行されるコールバック関数。
• 知らせ:

①数値を持つ属性値はすべて移動可能。
②slideUp()などの他のモーションメソッドにもパラメータ3と4があります

 <スタイル>
       *{
                マージン: 0;
                パディング: 0;
            }
            p{
                位置: 相対的;
                左: 0;
                下マージン: 10px;
                背景色: スカイブルー;
                幅: 50px;
                高さ: 50px;
            }
        </スタイル>
    <!--------------------------------------->
    <本文>
        <p>1</p>
        <p>2</p>
        <p>3</p>
        <p>4</p>
        <p>5</p>
        <p>6</p>
        <p>7</p>
        <p>8</p>
     <script src="../jq/jquery-1.12.4.min.js"></script>
     <スクリプト>
            var $ps = $("p");
            //実際の操作では、揮発性の時間を変数 var during = 1000 に格納する方が適切です。
            //数値を持つ属性値はすべて移動可能 $ps.click(function(){
                $(this).animate({"width":500,"opacity":0.5},during,"swing")
            })
        </スクリプト>
    </本文>

アニメーションキューイング

  • 同じ要素オブジェクトに複数のアニメーションが定義されている場合、アニメーションは実行のためにキューに入れられます。
  • 異なる要素オブジェクトにアニメーションがある場合、キューイング メカニズムは発生しません。
  • その他の非モーション コードの場合は、モーションが完了するまで待機しません。たとえば、CSS スタイルを変更してもキューに追加されません。
<スタイル>
  div{
       幅: 100ピクセル;
       高さ: 100px;
       境界線: 8px 実線 #ccc;
       位置: 絶対;
       左: 0;
       上: 0;
       背景: url(../../imgs/1.jpg) 繰り返しなし 中央 中央;
     }
.box2{
      境界線の半径: 50%;
      オーバーフロー: 非表示;
       }
div スパン{
       位置: 絶対;
       左: 0;
       上: 0;
       幅: 100%;
       高さ: 100%;
       背景色: rgba(221, 130, 130, 0.4);
     }
</スタイル>
  <!-------------css スタイル------------------>
<本文>
  <div class="box1"><span></span></div>
  <div class="box2"><span></span></div>
  
<script src="../jq/jquery-1.12.4.min.js"></script>
<スクリプト>
 var $box1 = $(".box1");
 var $box2 = $(".box2");
 var 期間中 = 2000;
 //アニメーションキューの比較 $box2.animate({"left": 400,"top":400},during)
 //Box1 と box2 はそれぞれ独自のアニメーションを実行します //同じ要素に複数のアニメーションをキューに入れます $box1.animate({"left": 400},during) //キューに入れます $box1.animate({"top": 400}, during)
 // アニメーションの下部はタイマーで、非同期読み込みです // 同じ要素オブジェクトに関する非モーションコードはキューに入れられません // $box1.css ("height", 200)
 </スクリプト>
</本文>
  • アニメーションを組み込んだ表示と非表示の方法。同じ要素に設定するとアニメーションキューも存在する。
//他の移動方法も同じ要素に設定されている場合、キューに追加されます$box2.mouseenter(function(){
      $(this).children().slideUp(実行中)
  })
  $box2.mouseleave(関数(){
      $(this).children().slideDown(実行中)
  })
  //マウスが素早く上下に動き、box2 の灰色の領域がすべての回数実行されるまでスライドし続けます。
  • 同じ要素上の移動はチェーン呼び出しメソッドに簡略化できます
// 同じ要素の複数の移動は、チェーン呼び出しによって簡素化できます // ただし、キューに入れる必要があります $box1.children().fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500)

delay() メソッド

  • 特定のモーション メソッドの前に delay() を設定すると、後続のモーションが指定された時間後に実行され、モーションが遅延される効果があります。
  • delay() のパラメータは時間値です。他のモーションメソッドにも遅延効果があります。
   //遅延 $box1.children().delay(3000).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500)

アニメーションを停止するstop()メソッド

  • 要素オブジェクト上のキューに入れられたアニメーションを停止する方法を設定します
  • stop() には 2 つのパラメータがあり、4 つの停止モードを提供できます。両方のパラメータはブール値です。

• パラメータ 1: 後続のアニメーション キューをクリアするかどうかを設定します。true の場合はクリアすることを意味します (後続のアニメーションもクリアされ、実行されなくなります)。false の場合はクリアせず、現在のアニメーションのみを停止することを意味します (後続のアニメーションはすぐに実行を開始します)。
• パラメータ 2: 現在のアニメーションがすぐに完了するかどうかを設定します。 true の場合、すぐに完了し、オブジェクトはすぐに終了位置に移動します。 false の場合、現在のアニメーションは完了せず、現在の位置ですぐに停止します。

<スタイル>
 div {
      幅: 100ピクセル;
      高さ: 100px;
      境界線: 8px 実線 #ccc;
      位置: 絶対;
      左: 0;
      トップ: 40;
      背景: url(../../imgs/1.jpg) 繰り返しなし 中央 中央;
   }  
 div スパン {
      位置: 絶対;
      左: 0;
      上: 0;
      幅: 100%;
      高さ: 100%;
      背景色: rgba(221, 130, 130, 0.4);
    }
 </スタイル>
</head>
  
<本文>
 <input type="button" value="true true" id="btn1">
 <input type="button" value="true false" id="btn2">
 <input type="button" value="false false" id="btn3">
 <input type="button" value="false true" id="btn4"><br>
  
 <div class="box1"><span></span></div>
  
  
<script src="../jq/jquery-1.12.4.min.js"></script>
<スクリプト>
   var $box1 = $(".box1");
  
   var 期間中 = 2000;
  
   // 同じ要素に複数のアニメーションをキューに入れる $box1.animate({ "left": 400 }, during)
   $box1.animate({ "top": 400 }, 中)
   $box1.animate({"left":0},途中)
   $box1.animate({"top":40},アニメーション中)
 
  // アニメーションを停止 // ボタンクリックイベントを追加 var $btn1 = $("#btn1")
  var $btn2 = $("#btn2")
  var $btn3 = $("#btn3")
  var $btn4 = $("#btn4")
  
  //true true キューに入れられたアニメーションをクリアし、現在のアニメーションを直ちに完了し、終了位置で停止します$btn1.click(function () {
       停止します。
  })
  //true false アニメーションをクリアして現在の位置で停止します $btn2.click(function () {
     停止します。
  })
  //false false 次のアニメーションをクリアせず、現在のアニメーションで停止し、次のアニメーションを実行します $btn3.click(function () {
     停止します。
  })
  //false true 次のアニメーションをクリアしない、現在の動きはすぐに終了します$btn4.click(function () {
       $box1.stop(偽、真);
  })
 </スクリプト>
</本文>
  • デフォルトでは、パラメータ値はfalseです。
  • 実際の作業では、後ろのキューをクリアして現在の位置を停止することが一般的に必要になります。 Stop (true) がよく使用されます。2 番目のパラメータが設定されていない場合は、デフォルトで false になります。

アニメーションキューをクリア

アニメーションキューの問題

  • モーションを開始するプログラムをイベント関数内に配置すると、イベントが複数回トリガーされ、関数が複数回実行されます。このように、複数のアニメーションが要素に追加され、アニメーションがキューに入れられます。 (アニメーション蓄積問題)

キューに入れられたアニメーションをクリアし、嫌がらせ防止操作を実行する必要があります。

  • 回避策

方法 1: stop() メソッドを使用する

各移動関数の前に stop(true) を追加します。これは、移動が実行される前に、以前にキューに入れられたアニメーションがクリアされ、現在の位置で停止することを意味します。

<スタイル>
 div {
     幅: 100ピクセル;
     高さ: 100px;
     境界線: 8px 実線 #ccc;
     位置: 絶対;
     左: 0;
     上: 0;
     背景: url(../../imgs/1.jpg) 繰り返しなし 中央 中央;
   } 
div スパン {
     位置: 絶対;
     左: 0;
     上: 0;
     幅: 100%;
     高さ: 100%;
     背景色: rgba(221, 130, 130, 0.4);
  }
  </スタイル>
<本文>
  <input type="button" value="true true" id="btn1">
  <input type="button" value="true false" id="btn2">
  <input type="button" value="false false" id="btn3">
  <input type="button" value="false true" id="btn4"><br>

  <div class="box1"><span></span></div>

  <script src="../jq/jquery-1.12.4.min.js"></script>
  <スクリプト>
     var $box1 = $(".box1");

     var 期間中 = 2000;
    // アニメーションをクリアする $box1.mouseenter(function(){
        $(this).children().stop(true).slideUp(実行中)
    })

   $box1.mouseleave(関数(){
       $(this).children().stop(true).slideDown(実行中)
   })
    </スクリプト>
</本文>

方法2: 関数スロットリング方式を使用する

要素が移動中の場合は、直接戻り、後続の移動コードを実行しません。

各 jQuery オブジェクトは is() メソッドを呼び出すことができ、これは要素オブジェクトの特定の状態を表示するために使用されます。パラメータの位置が is(":animated") の場合、animated は移動を意味し、戻り値はブール値です。true は移動を意味し、false は移動しないことを意味します。

//関数スロットリングメソッド $box1.mouseenter(function(){
    if(is(":animated")){
        // 動いていると判断された場合はそのまま戻り、他のアニメーションは実行されなくなります。
    }
    //動きがない場合は、次の新しいアニメーション $(this).children().slideup(during); を実行し続けます。

})

$box1.mouseenter(関数(){
    if(is(":animated")){
        // 動いていると判断された場合はそのまま戻り、他のアニメーションは実行されなくなります。
    }
    // 動きがない場合は、背後で新しいアニメーションの実行を継続します // 安全のため、stop(true) と組み合わせて使用​​されることもあります $(this).children().stop(true).slideup(during);

})
  • 安全上の理由から、関数 throttling が stop(true) と組み合わせて使用​​されることがあります。
  • アニメーションの蓄積問題を解決する 2 つの方法、stop(true) と関数スロットリングの方法には違いがあります。 stop メソッドは、アニメーションを現在の位置で停止させ、関数をスロットルさせることができます。停止時に return が返された後、通常は現在のアニメーションが完了します。

以上は、jQueryのanimateアニメーションメソッドとアニメーションキューイング問題の解決方法についての詳細な説明です。jQueryのanimateアニメーションメソッドの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • JQuery アニメーション アプリケーションの例
  • jQuery で animate.css をカプセル化する例
  • jQuery animate アニメーションの連続モーションの例
  • jQuery で animate() を使用し、$("body").animate({"scrollTop":top}) が Firefox でサポートされていない問題を解決する方法
  • jQuery animate() を使用して背景色のグラデーション効果を実現する方法 [jQuery.color.js プラグインを使用]
  • ネイティブJSを使用したjQueryのanimate()アニメーション例の実装に関する簡単な説明
  • jQueryで3次元の数値の動的な増加を実現する(animateメソッド)
  • jQuery における Animate のいくつかの使い方と注意事項
  • jQueryは、ulリスト項目のフローティング効果を実現するためにanimateを使用します。
  • jQuery の animate アニメーション機能を使用してエンドウ豆の放出効果を実現する
  • jQuery animate() アニメーション効果をネイティブ JS で実装する簡単な例

<<:  Ubuntu 18でターミナルを美しいコマンドラインプロンプトに変更する方法

>>:  Ubuntu 16.04 で MySQL マスター スレーブ同期を設定する方法

推薦する

JDBC 接続 (MySQL への接続) の 6 ステップのサンプル コード

JDBC の 6 つのステップ: 1. ドライバーを登録する2. データベース接続を取得する3. デ...

vue+springbootでログイン認証コードを実現

この記事では、ログイン認証コードを実装するためのvue+springbootの具体的なコードを例とし...

Mysql5.6.36 スクリプトのコンパイル、インストール、初期化のチュートリアル

概要この記事は、centos7.3 上で mysql5.3.6 を自動的にコンパイルしてインストール...

JavaScriptでポインターの位置を取得する方法を教えます

JavaScript でポインターの位置を取得する方法は、イベント オブジェクトの pageX と ...

Jira リバース プロキシを実装するための nginx について

概要: nginx リバース プロキシ jira を構成し、https を実装します。Tomcat ...

MySQL がテーブルを読み取れないエラー (MySQL 1018 エラー) の解決方法

1. エラーの再現MySQL データベースにはアクセスできますが、データベース テーブルを読み取るこ...

デザイン理論: テキストの読みやすさと可読性

<br />少し前に、ビジネス上の必要性から、ラップトップに Souba をインストール...

CSS3 天子グリッドリストのスタイルの書き方

多くのプロジェクトでは、中央に灰色の分割線があり、両側に分割線がないグリッド表示の機能を実装する必要...

divの背景を透明に設定する方法の例

div の背景を透明にする一般的な方法は 2 つあります。 1. 不透明度属性を 0 ~ 1 の値に...

Nginx がフロントエンド リソースへのクロスドメイン アクセスの問題をどのように解決するかの詳細な説明

フロントエンドのクロスドメイン問題に2日間近く悩まされましたが、ようやくngnxを使って解決したので...

mysql コマンドライン スクリプトの実行例

この記事では、例を使用して MySQL コマンドライン スクリプトの実行について説明します。ご参考ま...

WangEditor リッチ テキスト コンポーネントを Angular でカプセル化する方法

リッチ テキスト コンポーネントは、Web プログラムで、特にブログやフォーラムなどの Web サイ...

17の広告効果測定の解釈

1. 広告の 85% は未読です<br />解釈: 成功する広告の 15% にどうやって...

Mysql データベースの高度なビュー、トランザクション、インデックス、自己接続、ユーザー管理の例の分析の使用

この記事では、ビュー、トランザクション、インデックス、自己接続、ユーザー管理など、MySQL データ...