そして、スロットルは、コード内の画像安定化を達成するために

シェイク

その後、イベントn秒で起動するコールバック、そして、これはその後、再タイミング、n秒でトリガされた場合:コンセプト。

例:エレベーターに誰かが、そのエレベーターはエレベーターに誰かが、私たちは出発前に10秒間待つ必要が続いた場合、10秒後に開始されます。

アイデア:あなたは、再起動のタイミングにタイマーを空にしている場合は、この変数はタイミングを表す場合、変数を維持することによって閉鎖が開始時刻前に、始まりました。

関数デバウンス(FN、時間){ 
  タイマーせ = NULL ;
  戻り 関数(){ 
    コンテキストせ = この
    LETの引数 = 引数を
     場合(タイマー){ 
      てclearTimeout(タイマ)。
      タイマー = nullを
    } 
    タイマー = setTimeoutメソッド(関数(){ 
      fn.apply(文脈、引数)
    }、時間)
  } 
} 
window.onscroll =デバウンス(関数(){ 
  にconsole.log( '触发:' + 新しいです。日付()getTime()); 
}、 1000)

スロットリング

コンセプト:時間の指定単位、この単位時間内に、一つだけのトリガ・イベントのコールバックの実行、イベントは一度しか効果を取ることができ、時間の同じ単位で複数回トリガされた場合。

例:ゲームでクールダウンは、あなたが押す回数に関係なくは、スキルが唯一の良いを冷却した後、再びトリガすることができます

アイデア:に代わって機能を実行するために許可され、その変数の機能を実行するために許可されている場合は、変更することが許可されていない、と指定した時間後に変数を回復するタイマーを使用する変数を維持することにより閉鎖。

関数スロットル(FN、時間){ 
  canRunを聞かせ = 戻り 関数(){
     場合(canRun){ 
      fn.apply(この引数)
      canRun = 
      のsetTimeout(関数(){ 
        canRun = 
      }、時間)
    } 
  } 
} 
window.onscroll =スロットル(関数(){ 
  にconsole.log ( '触发:' + 新しい日付()getTime()); 
}、 1000)

 

おすすめ

転載: www.cnblogs.com/wtsx-2019/p/12615038.html