私はほとんど初心者のJavascript'erであり、ボタンを押すと、メインウィンドウからの画像を含む循環的な「ムービー」を表示するウィンドウをポップアップするWebページで試しています。私が試したことから、グーグルでかなり近づいていることがわかりますが、何かが私を逃しています。
私は、次の結果が 2 つの別々の質問につながることを知っています。しかし、両方とも同じ問題/目的に関連しているため、おそらくこれは単一の(長いが)投稿に属していると思います。だから私はそれの大きさが人々をあまり怒らせないことを願っています... ;-)
とにかく、これは私が関連するコードだと思うもののスナップショットです:
<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()
サイクルは、メインウィンドウの画像配列からポップアップ単一画像を更新します。- 外部ファイルから HTML コードをロードしてポップアップをロードすると (
anim.html
)、ウィンドウがリロードを待ち続ける「進行状況バー」からステータスバーが表示されるように見えます。window.open()
他の場所からのものかどうかはまだ試してみますが、空のウィンドウをロードして writeln を実行するのではなく、 を使用して外部ファイルから HTML ページをロードすることが重要/関連性があるかどうかを知りたいHTMLを「書く」。 - そうしないと、ブラウザー
while(true)
が応答を停止し、コンピューターが 100% の CPU になるためです。最後のアイテムの前にカウンターをゼロに戻すサイクルを作成できますがif
、for
これを無限サイクルにする別の「エレガント」または「より適切な」方法はありwhile(true)
ますか?それとも問題ありませんか?
事前にコメントをいただければ幸いです。可能であれば、同様のソリューションを説明している既存の参考文献へのポインタです。