2009-10-26 11 views
1

我目前正在使用setTimeoutonLoad按顺序加载几张图像。基本上当图像加载完成时,触发onLoad,通过setTimeout调用启动另一个图像加载。不幸的是,如果图像加载由于某种原因(如后续的ajax调用)而中断,则onload永远不会被调用,并且任何要加载的图像都不会被加载。有没有什么方法可以检测到这种情况?我试图挂钩到onErroronAbort(在图像标签上),这些都不被称为。在Javascript中检测图像负载取消

queuePhotos: function(options) 
{ 
    this.init(); 
    this.photo_urls = options.photo_urls; 
    this.photo_size = options.size 
    this.max_width = options['max_width']; 
    this.max_height = options['max_height']; 
    this.containers = options['containers']; 
    yd = YAHOO.util.Dom; 
    photo_tags = yd.getElementsByClassName('image_stub', 'div'); 
    for(i in photo_tags) 
    { 
    //create new image 
    photo = new Image(); 
    this.queue.push({ tag: photo_tags[i], photo: photo }); 
    } 
    setTimeout(photoLoader.prepareNextPhoto, 1); 
}, 

prepareNextPhoto: function() 
{ 
    photo_tag_and_image = photoLoader.queue.shift(); 
    if(photo_tag_and_image) 
    { 
    YAHOO.util.Event.addListener(photo_tag_and_image.photo, "load", photoLoader.appendPhoto, photo_tag_and_image, photoLoader); 
    photo_tag_and_image.photo.src = photoLoader.photo_urls[photo_tag_and_image.tag.id]; 
    } 
}, 

回答

3

AJAX调用不应取消加载图像。可能还有其他的东西在这里......

我不认为你可以随时检测图像的加载失败。如果您的超时定时器到期后,您可以触发具有一定超时阈值的计时器,将图像视为失败,然后再从图像中获取加载事件。

+1

的“别的东西”可能是,如果在AJAX调用设置新的innerHTML包含加载图像元素,或者其母公司上。 – 2009-10-26 23:25:44

0

可以onload事件打电话的onerror

myImage.onload = function(){ alert("loaded"); }; 
myImage.onerror = function(){ alert("whoops"); }; 

埃里克