4

_.debounce()最多每 x 毫秒触发_.debounce(function,x) .. 我想调整它以仅在最后x一个之后执行一个方法 millis 。 _.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 上进行测试),但是在调整大小时,我不断收到对去抖动函数主体的多次调用。好像它的行为与 _.throttle 完全一样,现在我想起来了.. 奇怪的东西。

50ms 是一个相当短的去抖时间。我打赌它按预期工作,你只需要更长的去抖动时间。50ms 是 1/20 秒。我不确定窗口调整大小事件会这么快触发。但即使是这样,在调整大小时鼠标移动中最微小的停顿也可能会触发这种情况。

在你的 debounced 函数中删除所有这些setTimeout废话并将 debounce 时间设置为更像的东西250,我敢打赌它会像你想要的那样工作。

于 2012-12-05T19:37:53.660 回答
2

来自http://underscorejs.org/#debounce

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

传递参数以在true等待 间隔的前沿而不是后沿触发函数在防止意外双击“提交”按钮再次触发等情况下很有用。immediatedebounce

所以,$(window).on("resize",_.debounce(resizeMap,100))应该只是工作。

于 2012-12-05T18:20:42.257 回答