【问题标题】:jquery kill long-running .each functionjquery 杀死长时间运行的 .each 函数
【发布时间】:2013-09-13 21:34:04
【问题描述】:

我正在使用它来顺序淡入一堆 div 的:

   $('#headerwrapper div').each(function(i) {
         $(this).delay(999 + (i * 999)).fadeIn(); 
   });

http://jsfiddle.net/V2pCv/3/

我试图弄清楚如何通过 .scroll 来阻止它。 (暂停/恢复会很好,但在搜索并尝试了几十件事之后,我已经准备好放弃这么多的想要了。)

滚动功能如下:

   $(window).scroll(function(){
        if ($(this).scrollTop() > 20) {
               $('#headerwrapper').fadeOut();
        } else {
               $('#headerwrapper').fadeIn();
        }
    });

能够杀死 .each 函数似乎如此重要的原因是已完成 产品将加载数十张图像,对我来说,如果这些图像甚至不在 该函数应该停止视口以释放处理/内存。

我不知道父 div 的 .fadeOut 是否足以真正停止/杀死 .each 函数,或者它是否仍在后台连续触发。杀死这个 .each 函数的更正确的方法是什么?

【问题讨论】:

  • 您无法停止 .each() 函数本身,因为它是同步代码,并且您的 .scroll() 处理程序在 .each() 完成之前不会被调用。您可以停止的是 .each() 中的代码排队的多个动画 - 它们是异步的,因此您的 .scroll() 处理程序可以在它们完成之前被调用。

标签: jquery each


【解决方案1】:

这应该足以结束标题 div 上的所有排队效果。

$("#headerwrapper div").finish()

在旧版本的 jQuery 中,使用 .stop(true,true) 代替 .finish()

除了从头开始之外,我不建议尝试恢复它。

【讨论】:

  • 我尝试过停止、完成、出列、死亡等,但似乎没有任何东西能够穿透 .each 函数的力场。我确实包括了一个小提琴,所以如果有人想尝试制作这个 .each train stop...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多