我有一个幻灯片已经工作了很长时间。 我正在将网站更新为 XHTML 过渡,现在幻灯片在 IE 9 中不起作用。
似乎问题是"完整"功能不起作用。以下代码启动幻灯片放映(在页面加载后调用):
function Initialize() {
document.images["carImg"].src = imgList[0];
if (document.getElementById) {
theLink = document.getElementById("linkTo");
theLink.href = imgURL[0];
}
if (document.images["carImg"].complete) SetTheInterval();
else setTimeout("Initialize()", 1000);
}
document.images["carImg"].complete
总是解析为 false,因此它每秒调用一次初始化。图像imgList[0]
已加载,因为它正在显示。但未设置完整属性。
如果我注释掉if (document.images["carImg"].complete)
条件,只需调用SetTheInterval()
,幻灯片放映即可。
它也可以在Firefox中工作(有条件的)。如果我将IE 9设置为"兼容性视图",它也可以工作(尽管其他事情看起来很奇怪)。
有谁知道为什么在IE 9中没有设置"完整"属性?有什么变化吗?
更新:它似乎完成只是不适用于第一张图像。对于后续图像,在加载图像时设置 complete。
尝试查看是否存在加载或错误事件,即使重置 src 也可能会生成无法立即完成的"脏"图像,即使该图像存在。
我以前没有注意到这一点,但是在IE10(没有9)中,您需要onload事件。当加载触发时,complete 为真,但一旦写入 img src,它又为假。您也可以只设置 src 一次,只需在超时时检查完成即可。
如果没有加载处理程序,即使在图像出现之后,计时器也会永远持续下去......
window.ready=function(){
var img= document.images[0];
img.onload= function(){
clearTimeout(ready.timer);
alert('onload called, img.complete= '+img.complete);
};
// temporary error handler, if needed
img.onerror=function(e){
clearTimeout(ready.timer);
alert('Error!n'+e.message || e);
};
// set the new src
img.src= Memry.Rte+'art/sundrag.gif';
if(!img.complete) ready.timer=setTimeout(window.ready, 300);
else alert('complete');
}
ready()
我不确定这是最好的答案,但时间是浪费的,它有效。
问题是,我将图像标签的初始src
设置为 spacer.gif
(在 HTML 中)。因此,在执行初始化例程时true
图像的 complete
属性。
但是,当我在 javascript 中将 src
属性重置为图像列表中的第一个图像时,complete
属性变得false
。我不知道为什么。此后,将 src
属性更改为图像列表中的另一个图像确实将 complete
属性设置为 true
。
在IE9和Chrome中都是这样,但在Firefox中不是。去图。因此,我没有将图像的src
设置为 spacer.gif
,而是读取了代码隐藏 (C#) 中包含图像名称列表的 javascript 文件,并将图像标记的初始 src
属性设置为第一个图像。现在它起作用了。
FWIW,我确实尝试在图像标签中使用onerror,但没有出现错误。
希什。我不喜欢javascript。