2013-02-20 75 views
0

我为我正在开发的移动网站编写了一个图片库jQuery插件。对于画廊中的每张图片,我都有低分辨率和高分辨率。Image onload event not firing on Windows Phone 8

该图库全屏显示,每个图像最初都以低分辨率图像填充。当用户向左/向右滑动给定图像时,我想要开始安静地加载高分辨率图像,并在完成时用低分辨率图像替换它。

此时此操作适用于iOS和Android,但在Windows Phone 8上,高分辨率图像的onload事件似乎不会触发,因此交换不会发生。

代码:

var image = images[images_i]; 
if (image.$el && image.full && image.$el.attr('src') != image.full) { 
    var fullImage = new Image(); 
    fullImage.onload = function() { 
     image.$el.attr('src', image.full); 
    }; 
    fullImage.src = image.full; 
} 

(库生成“图片”散列包含每个图像的URL,jQuery对象,元数据等)

我还最初试图实际插入一个新的隐藏图像进DOM,并使用jQuery绑定到加载事件。但是,我发现如果图像已经被缓存了,这并不会一直触发,所以我必须为$ image.prop('complete')添加另一个检查。这在WP8上产生了相同的结果。

+0

我知道IE有一个问题,如果图像缓存的onload事件不会触发。绕过它的方法是检查是否有高度,如果有,图像被加载并且可以调用onload方法。 – epascarello 2013-02-20 17:02:43

回答

0

显然我第一次尝试的时候非常接近,但却犯了错误的错误。我在SO上看到的关于此问题的所有答案仅包括图像的onload事件处理,但没有说明如果IE已经缓存了图像,则该事件不会触发。

完整的解决方案:如果图像已经缓存

var fullImage = new Image(); 
fullImage.onload = function() { 
    $img.attr('src', fullImageUrl); 
}; 
fullImage.src = image.full; 
if ($(fullImage).prop('complete') { 
    $img.attr('src', fullImageUrl); 
} 

$(fullImage).prop( '完整')将返回true。