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

推薦する

Vue の共通 A​​PI と高度な API の概要

目次次のチェックミックスイン$強制更新設定、削除フィルター指令その他の単純な共通プロパティとメソッド...

Docker で Let's Encrypt から永久無料 SSL 証明書を取得する方法

1. 原因公式の cerbot は面倒すぎます。野生の成長よりもさらに悪い acme.sh の使用は...

Windows 10 に付属する仮想マシンのネットワークを設定するための詳細な手順 (グラフィック チュートリアル)

1. サーバー ホストをクリックし、右側の操作リストで [仮想スイッチ管理] をクリックして、仮想...

CentOS7.8 に mysql 8.0.20 をインストールするための詳細なチュートリアル

1. MySQLソフトウェアをインストールするMySQL 公式 Yum リポジトリ、MySQL バー...

CSS スタイルの優先順位はどれくらい複雑ですか?

昨晩、面接の質問を見ていたら、CSS スタイルの優先順位について特に明確に説明していない人が何人かい...

JDBC を使用して Mysql データベースに接続する際に発生する可能性のある問題の概要

まず、いくつかの概念を明確にします。 JDBC: Javaデータベース接続、Oricalによって規定...

MySQLフィルタリングレプリケーションのアイデアの詳細な説明

目次mysql フィルター レプリケーションメインデータベースに実装ライブラリから実装いくつかの質問...

AngularパイプラインPIPEの紹介と使い方

序文PIPE、パイプラインと翻訳されます。 Angular パイプは、HTML コンポーネントで宣言...

mysql ローカルログインでポート番号を使用してログインできない問題の解決策

最近、Linux を使用してローカルにログインしていたところ、正常にログインできず、次のエラー メッ...

Viteの新しい体験の詳細な説明

Vite とは何ですか? (フロントエンドの新しいおもちゃです) Vite は、ネイティブ ES モ...

MySQLクエリのパフォーマンスに影響を与える大きなオフセットの理由と最適化の詳細な説明

序文MySQL クエリは select コマンドを使用し、limit および offset パラメー...

MySQL データベース インデックスの面接の質問 (基本的なプログラマー スキル)

目次導入インデックスの原則1. データページ2. ページディレクトリ3. インデックス原則分析要約す...

Linux環境でrmによって誤って削除されたファイルを回復する方法

目次序文RMの後には希望はあるのでしょうか?最前線を使ってファイルを取得するextundeleteを...

MYSQL(電話番号、IDカード)データ非感応化の実装

1. データ感度低下の説明日常の開発ニーズでは、データの感度低下が頻繁に発生します。たとえば、ID ...