2011-11-06 74 views
1

我该如何在JavaScript中做一个自旋锁?Spinlock in Javascript

我试图加载一些图片,一切都被加载后,我只可以向前走,所以我有这样

for(...) 
    image[i].onload = function() { ++imagesloaded; } 

while(imagesloaded != totalimages) 
{ 
} 

一个自旋锁,并且它崩溃了我的浏览器。有没有更好的方法来做到这一点?或者我失踪的产量/睡眠功能?

回答

0

不要使用循环来检查。检查事件处理函数。 (所以你只做图像加载时检查,而不是连续和尽可能快)

+0

[哦,你的意思是这样吗? ':P'](http://stackoverflow.com/questions/8030971/spinlock-in-javascript/8030988#8030988) –

3

简短的回答:不要自旋锁。


较长的答案:这里是如何做到这一点:

var imagesLoaded = 0; 
var totalImages = 42; 

function handleImageLoad() 
{ 
    imagesLoaded++; 
    if (imagesLoaded === totalImages) 
    { 
     doSomething(); 
    } 
} 

for (var i=0; i<totalImages; i++) 
{ 
    image[i].onload = handleImageLoad; 
} 

在一般情况下,当你想睡觉/等待/旋在JavaScript中,而不是考虑在以下方面解决问题回调(和setTimeout/setInterval)。

+1

请记住,您必须在'.src'之前设置'onload()'处理程序在图像上设置。否则,如果图像从缓存中加载(因此加载非常快),您可能会错过某些浏览器中的'onload()'事件。 – jfriend00