我有一种情况,当用户下载时,我们会逐步向他们展示越来越高质量的图像。
逻辑如下所示:
3 图像格式:低质量 (5-8kb)、大 (60-80kb)、高分辨率 (150-250kb)。
- 检查是否缓存了大或高分辨率照片,如果最初显示缓存版本并完成。
- 如果不加载低质量图像并立即显示给用户。
- 预缓存大图像并在加载后更改 img.src。
- 检查用户窗口大小是否超过某个阈值,预缓存高分辨率图像并在加载时更改 img.src。
一切都很漂亮。
然而,在高分辨率下载过程中,如果用户点击转到下一张图片,一切当然会搞砸,因为我们已经设置了在加载前一张高分辨率图片时发生 onload 事件。
本质上,onload 事件发生在用户已经点击进入下一个图像之后,这意味着新图像将被旧图像替换。
我需要做的是能够在用户更改到下一张照片时取消该功能。
该函数看起来像这样:
(function(index){
$(highresimage).imagesLoaded(function(){
setTimeout(function(){
self.cache.image = $(highresimage).appendTo(self.cache.imagewrap);
self.cache.photos[index]['highresloaded'] = true;
setTimeout(function(){
self.cache.imagewrap.children('img').first().remove();
self.cache.image.css({
'left':'',
'position':'relative'
});
},10);
},200);
});
})(index);
所以我需要能够以编程方式取消$(highresimage).imagesLoaded(function(){});
实现这一目标的最佳方法是什么?
提前致谢。
编辑:请注意,在我的示例中,我们实际上是在克隆图像,更改 src,将其添加到 dom,留下几毫秒然后删除旧图像。这归结为 Firefox 中的一个错误,它在更改高分辨率图像的 src 时会导致闪烁。可怕的是,删除丑陋的超时会使 Firefox 用户的体验变得更糟。他们在那里是有原因的。:P