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 マスター スレーブ同期を設定する方法

推薦する

Linux 名前空間ユーザーの詳細な説明

ユーザー名前空間は Linux 3.8 で追加された新しい名前空間で、ユーザー ID やグループ I...

LinuxカーネルマクロContainer_Ofの詳細な説明

目次1. 構造体はメモリにどのように保存されますか? 2. container_ofマクロ3. 型4...

Centos7 esxi6.7 テンプレートの実際のアプリケーションの詳細な説明

1. Centos7.6システムを作成し、システムを最適化する1. NetworkManagerをオ...

MySQL共通インデックスとユニークインデックスの選択に関する詳細な分析

各人が固有の携帯電話番号で登録し、ビジネス コードによって重複する携帯電話番号が 2 つ書き込まれな...

JS でクリップボード API を使用する方法

目次1. Document.execCommand() メソッド(1)コピー操作(2)貼り付け操作(...

dockerを使用してTomcatをデプロイし、Skywalkingに接続する

目次1. 概要2. dockerを使用してTomcatをデプロイし、Skywalkingに接続する要...

MySQL 8.0.18 インストール構成の最適化チュートリアル

MySQLのインストール、設定、最適化は参考用です。具体的な内容は次のとおりです。 MySQL ダウ...

JSはキャンバス技術を使用してeChartsの棒グラフを模倣します

Canvas は HTML5 の新しいタグです。js を使用して Canvas 描画 API を操作...

Linuxのdateコマンドの使用

1. コマンドの紹介date コマンドは、現在の時刻または指定された時刻を指定された形式で表示するた...

Vuex環境の詳細な説明

目次Vuex環境を構築する要約するVuex環境を構築するsrcディレクトリにフォルダstoreを作成...

MySQLで指定した時間前にレコードを自動的に削除する方法

イベントについて: MySQL 5.1 では、イベントの概念が導入され始めました。イベントは「時間ト...

JSの高階関数5つを共有する

目次1. はじめに2. 再帰3. コールバック関数3.1 匿名コールバック関数3.2 パラメータ付き...

Apache Tika を使用してファイルが破損しているかどうかを検出する方法

Apache Tika は、さまざまな形式のファイルからファイル タイプを検出し、コンテンツを抽出す...

MySQL8.0.18 複数マスターと 1 スレーブの構成

目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...

nodejs で worker_threads を使用して新しいスレッドを作成する方法

導入前の記事で述べたように、NodeJS には 2 種類のスレッドがあります。1 つは、ユーザー リ...