【问题标题】:Stop setTimeout delaying first run停止 setTimeout 延迟第一次运行
【发布时间】:2012-01-05 12:21:21
【问题描述】:

所以我正在创建一个脚本,它可以添加漂浮在我网站页面上的云。然而,如this example 中所见,第一朵云的出现被spawn_cloud_loop 中的setTimeout 延迟(10-12 秒)。有什么方法可以强制立即添加第一块云而不会延迟。我尝试在spawn_cloud_loop(); 之前添加add_cloud();,但延迟仍然存在。整个项目可以在https://github.com/JordanAdams/jordanadams.github.com找到,云效果的代码在js/clouds.js


约旦

【问题讨论】:

  • your example 中看不到任何云彩 - 仅此 IE,还是链接错误?无论如何发布相关代码这里我们不能指望外部资源。
  • @ShadowWizard,对于第一个,您必须等待至少 10 秒,因此 OP 希望它更快。
  • @ShadowWizard - 你有没有费心去阅读这篇文章。云的出现被延迟(这是整个问题)。此延迟范围在 10 到 12 秒之间。
  • 你从来没有说过 10 秒,我认为这是短暂的延迟。

标签: javascript jquery loops settimeout


【解决方案1】:

您的clouds.js 脚本包含在头部中,然后add_cloud(); 立即运行。这意味着您创建一个新的云并尝试将其附加到不存在的“云” div 中,因为它尚未被解析。第二个和后续的云都创建好了,因为spawn_cloud_loop()函数有很长的延迟,以至于到那时文档已经被解析了。

您需要将包含的 cloud.js 脚本移到页面源代码中“clouds” div 下方的某个位置,或者将 add_cloud(); 调用放在文档就绪处理程序中,以便在“clouds”之后才会执行它" div 已解析:

$(document).ready(function(){
    add_cloud();
    spawn_cloud_loop();
    clean_up();
});

注意:如果您在设置超时之前将spawn_cloud_loop() 修改为调用add_cloud(),则不需要对add_cloud() 的初始调用:

function spawn_cloud_loop () {
    add_cloud();
    setTimeout(spawn_cloud_loop, rand(10000, 12000));
}

(当然,您仍然需要从准备好的文档中调用spawn_cloud_loop()。)

此外,如果您在动画结束时立即从 jQuery .animate() method's 完成回调中删除每个云,则根本不需要 clean_up() 进程:

cloud.animate({ left: window.screen.width+100 },
              50000,
              'linear',
              function(){ $(this).remove(); });

【讨论】:

  • 这很好用,你解释得很好。谢谢:)
  • 可以进行更多改进,这里是live test case - @Jordan FYI 以及..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 2013-12-07
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多