当JQuery中的resize()时,触发器触发多次

当JQuery中的resize()时,触发器触发多次,jquery,resize,Jquery,Resize,我使用Paul Irish Smartresize,但当我调整窗口大小时,resize()中的函数会多次触发,导致手风琴无法正常工作。 有人知道为什么会这样吗? 下面是正在运行的代码: 这是因为在重新调整大小时,会触发多次重新调整大小事件。具体来说(更多用于说明),当JavaScript循环通过窗口大小验证时,它检测到它比以前小/大,并再次触发它。由于循环速度非常快,因此在“单一”重新调整大小的过程中,会发生多起火灾 您可以这样做: var idCounter = 0; $(window).sm

我使用Paul Irish Smartresize,但当我调整窗口大小时,resize()中的函数会多次触发,导致手风琴无法正常工作。 有人知道为什么会这样吗? 下面是正在运行的代码:


这是因为在重新调整大小时,会触发多次重新调整大小事件。具体来说(更多用于说明),当JavaScript循环通过窗口大小验证时,它检测到它比以前小/大,并再次触发它。由于循环速度非常快,因此在“单一”重新调整大小的过程中,会发生多起火灾

您可以这样做:

var idCounter = 0;
$(window).smartresize(function(){
  var myId=(++idCounter);
  setTimeout(function(){
    if(myId===idCounter){
       anim3();
    }
  }, 500); // 500 milli the user most likely wont even notice it
}

这应该可以安全地忽略多个火灾,并且只处理最后一个火灾。(除非你花很多时间来调整大小,否则你可以增加超时)

这里有一段很好的代码可以帮你处理这个问题:

另见:


小提琴的代码与问题的代码不同。很抱歉,我更新了代码!谢谢你的代码,它工作得很好,但我意识到我还有一个问题。。。如果我只调整一次窗口大小,那么代码就可以了,但是当我多次调整窗口大小时,就会多次调用该函数。你知道吗?您可以在下面的链接中看到它的实际操作。我终于让它工作了。我需要一个标志,使我的函数只运行一次。谢谢你的插件,但我尝试了油门,问题仍然在这里…我很确定问题是其他的。。。
var idCounter = 0;
$(window).smartresize(function(){
  var myId=(++idCounter);
  setTimeout(function(){
    if(myId===idCounter){
       anim3();
    }
  }, 500); // 500 milli the user most likely wont even notice it
}