如何在窗口调整大小事件期间只调用一次javascript函数?

jay*_*rjo 1 jquery webkit resize cross-browser

在jQuery resize事件页面上,它被说成:

"调整大小处理程序中的代码永远不应该依赖于调用处理程序的次数.根据实现,调整大小事件可以在调整大小正在进行时连续发送(Internet Explorer和基于WebKit的浏览器(如Safari)中的典型行为和Chrome),或仅在调整大小操作结束时(Firefox中的典型行为)."

现在我发现我的应用程序中存在越来越多的内存泄漏,因为我不断调整浏览器窗口的大小,这反过来会不断触发特定的代码.我认为调整大小事件在调整大小操作结束时只调用一次,但是现在看完之后我认为我的代码本身就是过度使用了.

当调整大小操作已经结束时,是否有任何既定的做法只触发一次回调跨浏览器?

Fel*_*ing 6

无论如何,当您使用jQuery时,请查看Ben Alman的doTimeout插件.您可以使用它来去除您的事件处理程序.

甚至还有一个与您的案例完全匹配的示例:

$(window).resize(function(){
  $.doTimeout( 'resize', 250, function(){
    // do something computationally expensive
  });
});
Run Code Online (Sandbox Code Playgroud)

这里的关键是,传递给的函数doTimeout仅在未在下一个250毫秒内再次调用resize处理程序(即未触发resize事件)时执行.如果是,则中止计时器并启动新计时器.