【发布时间】:2011-05-11 19:45:55
【问题描述】:
有没有办法控制网页上图像的加载顺序?我正在考虑尝试通过首先加载轻量级“加载”图形来模拟预加载器。有什么想法吗?
谢谢
【问题讨论】:
有没有办法控制网页上图像的加载顺序?我正在考虑尝试通过首先加载轻量级“加载”图形来模拟预加载器。有什么想法吗?
谢谢
【问题讨论】:
使用 Javascript,稍后填充图像 src 属性。 # 告诉浏览器链接到页面上的 URL,因此不会向服务器发送请求。 (如果 src 属性为空,仍会向服务器发出请求 - 不太好。)
组装一个图像地址数组,并通过它进行递归,加载图像并在每个图像的onload 或onerror 方法返回一个值时调用递归函数。
HTML:
<img src='#' id='img0' alt='[]' />
<img src='#' id='img1' alt='[]' />
<img src='#' id='img2' alt='[]' />
JS:
var imgAddresses = ['img1.png','img2.jpg','img3.gif'];
function loadImage(counter) {
// Break out if no more images
if (counter==imgAddresses.length) { return; }
// Grab an image obj
var I = document.getElementById("img"+counter);
// Monitor load or error events, moving on to next image in either case
I.onload = I.onerror = function() { loadImage(counter+1); }
//Change source (then wait for event)
I.src = imgAddresses[counter];
}
loadImage(0);
您甚至可以使用document.getElementsByTagName("IMG")。
顺便说一下,如果你需要加载图片,this is a good place to start。
编辑
为避免对服务器的多个请求,您可以使用几乎相同的方法,只是在您准备好加载它们之前不要插入图像元素。有一个 <span> 容器等待每个图像。然后,循环遍历,获取span对象,动态插入图片标签:
var img = document.createElement("IMG");
document.getElementById('mySpan').appendChild(img);
img.src = ...
然后在创建元素时只进行一次图像请求。
【讨论】:
这里有一个小型的 jQuery 插件可以为你做这件事:https://github.com/AlexandreKilian/imageorder
【讨论】:
我认为这篇文章https://varvy.com/pagespeed/defer-images.html 给出了一个非常好的和简单的解决方案。请注意解释如何创建“空” 标签的部分:
data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" data-src="your-image-here">
避免
要显示加载图像,只需将其放入 HTML 中并稍后在适当的时刻/事件进行更改。
【讨论】:
只需在任何其他图片之前添加“正在加载”图片即可。通常它们包含在页面的最顶部,然后当页面加载完成时,它们会被 JS 隐藏。
【讨论】: