4

_.debounce())で最大でevevry xミリ秒で起動し_.debounce(function,xます..これを適応させて、最後のx..の数ミリ秒後にのみメソッドを実行するようにします。 _.debounce()

どうすればこれを行うことができますか?(私はそれ$.debounceがまさにそれを行うことを読みました。)

私はこれをやろうとしましたが、それは防弾ではありません(お尻の醜いことは言うまでもありません)

var timeout;
$(window).on("resize",_.debounce(function(){
  if(timeout){
    clearTimeout(timeout);
  }
  //when debounce comes in we cancel it.. this means only the latest debounce actually fires.
  //not bullet proof
  timeout = setTimeout(resizeMap,100);
},50));

これをエレガントに行う方法は?

4

2 に答える 2

4

あなたのコメントを読んだ後、これは今より明確になっています。

おそらくそれは私のブラウザです(サイズ変更イベントが頻繁に発生しないため、_debounceが呼び出されますか?Chromeでテストします)が、サイズ変更中に、debounced関数の本体に対して複数の呼び出しが発生し続けます。まるでそれが_.throttleとまったく同じように振る舞うかのように、今私はそれについて考えるようになります..奇妙なもの。

50msはかなり短いデバウンス時間です。私はそれが意図したように機能していたに違いない、そしてあなたはただもっと長いデバウンス時間を必要とする。50msは1/20秒です。ウィンドウのサイズ変更イベントがすぐに発生するかどうかはわかりません。ただし、その場合でも、サイズ変更中のマウスの動きのわずかな一時停止がこれをトリガーする可能性があります。

デバウンスされた関数でこのナンセンスをすべて削除しsetTimeout、デバウンス時間をもっと似たものに設定すると、思いどおりに機能するはず250です。

于 2012-12-05T19:37:53.660 に答える
2

http://underscorejs.org/#debounceから:

_.debounce(function, wait, [immediate])

パラメータを渡しtrueて、待機 間隔の後縁ではなく前縁で関数をトリガーします。「送信」ボタンを誤ってダブルクリックして2回目に起動するのを防ぐなどの状況で役立ちます。immediatedebounce

だから、$(window).on("resize",_.debounce(resizeMap,100))うまくいくはずです。

于 2012-12-05T18:20:42.257 に答える