[英]Is there a way of “controlled” preloading of images (maybe with help of jQuery)?
对于某种幻灯片,我正在尝试实现一个巧妙的图像预加载器,该预加载器应如下工作:
2.的其他可能性可能是暂停预加载,加载图像n并继续预加载,但是我更喜欢第一个想法,因为这将给您带来更复杂的重新排序的自由,例如(n,n + 1,n + 2,...,最后,第一个未加载,第二个未加载,...)。
到目前为止,我只是做了一个简单的预加载循环,就像这样:
for (var i = 0; i < issue.pages.length; i++)
{
log("preloading image from URL " + issue.pages[i].imageUrl);
var img = new Image();
img.onload = function()
{
log("reading loading image " + this.src);
};
img.src = issue.pages[i].imageUrl;
}
效果很好,但似乎阻止了其他图像的下载:如果我打电话
imageN = new Image();
imageN.src = issue.pages[n].imageUrl;
在循环加载的图片仍在加载的其他位置(按imageN
拇指), imageN
顺序之前不会加载。
有任何想法吗?
据我所知,没有办法停止或暂停使用javascript加载图像。 但是,控制图像加载顺序的一种好方法是将它们的加载事件链接在一起。 这是一个示例 (使用jQuery)。
在示例中,我有一个数组imgQueue
用作队列,还有一个loadNextImage
函数,该函数从队列中抓取图像进行加载,并在图像加载完成时调用loadNextImage
。
function loadNextImage() {
if (imgQueue.length > 0) {
var imgN = new Image();
imgN.src = imgQueue.shift();
$(imgN).load(function(){
$("#main").append(imgN);
loadNextImage();
});
}
}
要更改图像的加载顺序,您可以直接将它们在imgQueue
向前移动,例如,如果我想将图像5移到最前面:
imgQueue.unshift(imgQueue.splice(4,1));
例如,这不是完美的,除非图像很大,否则将它们按组加载可能更有意义。 另外,由于loadNextImage
操纵队列,您不能仅通过图像的原始索引来跟踪图像,因此您需要做一些花哨的操作,例如将它们存储为散列,以便以后找到它们:
var imgHashQueue = [
{name: "name", url = "url"},
...
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.