使用 JavaScript 同步请求图像?
Request images synchronously using JavaScript?
我正在尝试使用 JavaScript 来控制图像的加载。
存储这些图片的服务器一次只能处理1个请求,因此,一个包含两个或更多图片的网页会导致向服务器发送多个请求(超载,导致返回格式错误的图片)。
下面是显示图像的页面示例...
<html>
<head>
<title>Load Images Synchronously</title>
</head>
<body>
<table align="left" border="1" cellpadding="0" cellspacing="0" style="width:500px;">
<tbody>
<tr>
<td height="50px" style="text-align: center;"><img id="img1" src="" /></td>
</tr>
<tr>
<td height="50px" style="text-align: center;"><img id="img2" src="" /></td>
</tr>
<tr>
<td height="50px" style="text-align: center;"><img id="img3" src="" /></td>
</tr>
<tr>
<td height="50px" style="text-align: center;"><img id="img4" src="" /></td>
</tr>
<tr>
<td height="50px" style="text-align: center;"><img id="img5" src="" /></td>
</tr>
</tbody>
</table>
</body>
</html>
如您所见,它包含 5 个图像标签,它们是通过 html 中的脚本加载的(如下所示)。设置img标签的scr,图片显示了,但是还是异步请求。
<script>
document.getElementById("img1").scr="image1.png"
document.getElementById("img2").scr="image2.png"
document.getElementById("img3").scr="image3.png"
document.getElementById("img4").scr="image4.png"
document.getElementById("img5").scr="image5.png"
</script>
我需要知道如何让这些图像一个接一个地加载,以免使我的低功率服务器超载。
我曾尝试使用 IF 语句来检查图像的 'naturalheight'(如果它为 0,则图像尚未加载)但我对 JavaScript 很陌生并且遇到了困难这个。
我正在寻找一个简单的解决方案(也许是一个环绕函数的解决方案)并会在尝试加载下一张图片之前检查图片是否已加载。
我还需要代码来检查图像加载 100 次,中间有 100 毫秒的延迟。如果此时间后图像还没有加载,请继续下一个。
请一些专家指导我如何编写代码?
我认为你是错误地看待问题的。在 Javascript 中,您不能在一个线程中等待另一个线程加载图像,您必须使用回调。
您的解决方案可能是将要加载的所有图像添加到一个数组中,然后启动第一个图像的加载。在加载成功的回调方法中,进行显示,从数组中删除加载的图像,然后再次调用该方法加载数组的新第一张图像。它将运行直到所有图像加载完毕,一个接一个。
您可以使用图片 onload
回调来序列化您的图片加载。创建要加载的图像列表与 ID 列表相匹配。
var srclist = ["src1", "src2", ....];
var idlist = ["img1", "img2", ....];
function loadImage(index){
var image = document.getElementById(idlist[index]);
image.onload = function() {
index++;
if(index < idlist.length) {
loadImage(index);
}
}
image.onerror = function() {
//better handle this
}
image.src = srclist[index];
}
loadImage(0);
您需要考虑如果图像加载失败会发生什么 - 这会导致索引中断。
我正在尝试使用 JavaScript 来控制图像的加载。 存储这些图片的服务器一次只能处理1个请求,因此,一个包含两个或更多图片的网页会导致向服务器发送多个请求(超载,导致返回格式错误的图片)。
下面是显示图像的页面示例...
<html>
<head>
<title>Load Images Synchronously</title>
</head>
<body>
<table align="left" border="1" cellpadding="0" cellspacing="0" style="width:500px;">
<tbody>
<tr>
<td height="50px" style="text-align: center;"><img id="img1" src="" /></td>
</tr>
<tr>
<td height="50px" style="text-align: center;"><img id="img2" src="" /></td>
</tr>
<tr>
<td height="50px" style="text-align: center;"><img id="img3" src="" /></td>
</tr>
<tr>
<td height="50px" style="text-align: center;"><img id="img4" src="" /></td>
</tr>
<tr>
<td height="50px" style="text-align: center;"><img id="img5" src="" /></td>
</tr>
</tbody>
</table>
</body>
</html>
如您所见,它包含 5 个图像标签,它们是通过 html 中的脚本加载的(如下所示)。设置img标签的scr,图片显示了,但是还是异步请求。
<script>
document.getElementById("img1").scr="image1.png"
document.getElementById("img2").scr="image2.png"
document.getElementById("img3").scr="image3.png"
document.getElementById("img4").scr="image4.png"
document.getElementById("img5").scr="image5.png"
</script>
我需要知道如何让这些图像一个接一个地加载,以免使我的低功率服务器超载。
我曾尝试使用 IF 语句来检查图像的 'naturalheight'(如果它为 0,则图像尚未加载)但我对 JavaScript 很陌生并且遇到了困难这个。
我正在寻找一个简单的解决方案(也许是一个环绕函数的解决方案)并会在尝试加载下一张图片之前检查图片是否已加载。
我还需要代码来检查图像加载 100 次,中间有 100 毫秒的延迟。如果此时间后图像还没有加载,请继续下一个。
请一些专家指导我如何编写代码?
我认为你是错误地看待问题的。在 Javascript 中,您不能在一个线程中等待另一个线程加载图像,您必须使用回调。
您的解决方案可能是将要加载的所有图像添加到一个数组中,然后启动第一个图像的加载。在加载成功的回调方法中,进行显示,从数组中删除加载的图像,然后再次调用该方法加载数组的新第一张图像。它将运行直到所有图像加载完毕,一个接一个。
您可以使用图片 onload
回调来序列化您的图片加载。创建要加载的图像列表与 ID 列表相匹配。
var srclist = ["src1", "src2", ....];
var idlist = ["img1", "img2", ....];
function loadImage(index){
var image = document.getElementById(idlist[index]);
image.onload = function() {
index++;
if(index < idlist.length) {
loadImage(index);
}
}
image.onerror = function() {
//better handle this
}
image.src = srclist[index];
}
loadImage(0);
您需要考虑如果图像加载失败会发生什么 - 这会导致索引中断。