我正在尝试为使用Javascript的地图图像序列创建一个简单的动画查看器。我首先将图像加载到像这样的全局数组中如果加载失败,从Image数组中删除或跳过图像?
while(datetime <= endDatetime)
{
var fname = getImgFnameFromDate(datetime);
var imgAdd = new Image();
imgAdd.src = fname;
imgStore.push(imgAdd);
datetime.setMinutes(datetime.getMinutes() + 15);
}
然后通过它们在每个图像之间进行短暂等待循环。
function iter()
{
++imgIndex;
if (loopFlag) imgIndex = imgIndex % imgStore.length;
document.getElementById("map").src=imgStore[imgIndex].src;
}
现在,地图是在接近实时的情况下制作的,偶尔会有一些会丢失。该文件无法加载,而是在动画中间给出断开的链接图像。我想简单地跳过未加载的图像,可以跳过它或从阵列中删除它。
我已经使用图像宽度属性为“isLoaded”,即像
function iter()
{
++imgIndex;
if (loopFlag) imgIndex = imgIndex % imgStore.length;
document.getElementById("map").src=imgStore[imgIndex].src;
if (imgStore[imgIndex].width == 0) iter();
}
然而,这是不可靠的,往往会导致一个无限循环,因为它似乎触发图像已经收到了代理尝试有机会加载。
我已经尝试过为图像指定一个onError函数,但我无法弄清楚该函数应该做什么。我真的想要某种isLoaded属性,而不是事件。也许我正在以这种错误的方式去做?
谢谢你。然而,似乎仍然存在问题。按照您的建议使用onload()行为创建图像数组后,我尝试循环跳过不带myLoadFlag = true的图像。不幸的是,它跳过所有的图像。看起来好像这个检查在图像有机会加载(或类似的东西)之前被触发。我确信我在.src之前设置了onload()。相反,如果我让它只显示所有的图像,但打印出来以便屏幕显示这个标志的值,它看起来都是正确的;丢失的图像是不确定的,好的图像是真实的。 – Bogdanovist 2012-03-21 01:02:10
@ user1282133 - 当页面第一次加载时,您可以使用JavaScript预加载图像,而不是稍后在需要时通过JS加载它们。这让他们有更多时间在需要之前加载。没有办法让他们加载更快。他们需要时间来加载。仅供参考,此代码不会错误地决定图像尚未加载。它告诉你什么时候他们还没有加载YET。你只是希望他们在准备好之前加载。除非你使用预加载方案,否则你的代码需要等待,直到他们有时间加载。 – jfriend00 2012-03-21 01:09:45