我是一个主要是新手 Javascript'er,我正在一个网页上尝试它,按下按钮后,会弹出一个窗口,显示一个带有来自主窗口的图像的循环“电影”。从我尝试谷歌搜索的结果来看,我可以感觉到我已经很接近了,但是有些东西正在躲避我。
我知道接下来会导致两个不同的问题,这值得两个不同的帖子。但我认为因为两者都与相同的问题/目标有关,所以这可能属于一个(虽然很长)的帖子。所以我希望它的大小不会激怒人们太多...... ;-)
无论如何,这是我认为相关代码的快照:
<html>
<head>
<script language="javascript">
function wait() {}
function anim() {
var timeout; var next;
var popuptitle='Movie';
var main=parent;
var popup=parent.open("","",
"width="+main.document.images[0].width+",height="+(main.document.images[0].height+40)+
"toolbar=no,location=no,directories=no,status=no,"+
"menubar=no,scrollbars=no,copyhistory=no,resizable=no");
popup.document.write('<html><head><title>'+popuptitle+'</title></head><body>'+
'<p align="center"><img name="anim" width="100%" alt=""></p>'+
'<p align="center"><button name="close" onclick="javascript:window.close();">Close</button></p>'+
'</body></html>');
/*while(true)*/
for(i=0; i<main.document.images.length; i++) {
next=main.document.images[i].src;
popup.document.images[0].src=next;
timeout=setTimeout('wait();',500);
}
}
</script>
</head>
<body><h1>Pictures + animation</h1>
<p><button name="exec" onclick="javascript:anim();">Animate (popup)</button></p>
<p><img src="img1.jpg"></p>
....
<p><img src="img16.jpg"></p>
</body>
</html>
我为相关性输入/改编了这个;我希望我没有写错别字...
我正在使用 Debian Etch 的Iceweasel(Firefox 2.x 更名);我没有在其他浏览器上尝试过。在 Iceweasel 中,会发生以下情况:
- 弹出窗口按预期显示,但似乎循环直接进入最后一张图片。
setTimeout
似乎对图片之间的“暂停”没有影响。 - 显示了最后一张图片,并且弹出窗口的状态栏在中途显示其进度条,表明正在加载某些内容。
所以我的问题是:
- 我究竟应该如何在
setTimeout
这里使用电话?我试图让它调用一个“空”函数,所以它在具有 的循环中作为“暂停”工作,循环setTimeout()
从主窗口的图像数组中更新弹出的单个图像。 - 我发现,如果我通过从外部文件 (
anim.html
) 加载 HTML 代码来加载弹出窗口,状态栏似乎从“进度条”显示窗口一直期待重新加载。我仍然会尝试它是否来自其他地方,但我想知道我从外部文件加载 HTML 页面是否重要/相关window.open()
,而不是加载一个空窗口并对其执行 writeln 到“写” HTML。 - 我已经
while(true)
在循环中评论了,否则浏览器会停止响应并且计算机会进入 100% CPU。我可以if
在for
循环中设置一个在最后一项之前将计数器设置回零,但是是否有另一种“优雅”或“更合适”的方式来使这个无限循环 - 或者while(true)
做得很好?
我提前感谢您的评论,如果可能的话,请指向描述类似解决方案的现有参考书目。