私はほとんど初心者のJavascript'erです。私は、ボタンを押すと循環的な "ムービー"を表示するWebページ上で試しています。メインウィンドウからの画像を使用します。私が試したことから周りを回って私は私がかなり近づいていると感じることができますが、何かが私を逃しています。Javascript:メインウィンドウの画像からムービーをポップアップ
次の結果は2つの別々の質問に分かれています。しかし、私は両方が同じ問題/目的に関連しているので、おそらくこれは単一の(長いですが)投稿に属していると思います。だから私はそれのサイズがあまりにも多くの人々をenfuriateしません願っています... ;-)
をとにかく、ここで私は、関連するコードと思われるもののスナップショットだ:私は入力された
<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 rebrand);私は他のブラウザでこれを試していません。 Iceweaselでは、何が起こるかは次のとおりです。
- ポップアップが表示されているように見えますが、最後の画像にサイクルがまっすぐになるようです。
setTimeout
は、画像間の「一時停止」に影響しないようです。 - 最後の画像が表示され、ポップアップのステータスバーに進行中のバーが途中で表示され、何かがロードされていることが示唆されます。
だから私の質問は以下のとおりです。
- どのように正確に私はここ
setTimeout
コールを使用することが出来るのですか?私はそれが "空の"関数を呼び出すようにしようとしたので、それはサイクルで "一時停止"として動作し、setTimeout()
を持ち、メインウィンドウの画像配列からポップアップ単一画像を更新します。 - 外部ファイル(
anim.html
)からHTMLコードを読み込んでポップアップを読み込むと、ステータスバーがウィンドウがリロードを期待している "進行状況バー"から表示されているようです。私はそれが別の場所から来たのかどうか試してみるつもりですが、もし私が外部ページからwindow.open()
というHTMLページをロードすることが重要であるか関連しているのか知りたければ、空のウィンドウをロードしてwriteln HTMLを「書く」。 - 私はこのサイクルで
while(true)
をコメントしました。そうしないと、ブラウザが応答を停止し、コンピュータが100%CPUになるからです。for
サイクルでif
を作成して最後のアイテムの前にカウンタをゼロに戻すことができますが、これを無限のサイクルにするもう1つの「優雅」または「より適切な方法」がありますか、while(true)
は問題ありませんか?
私はあなたのコメントを事前に、可能であれば同様の解決策を記述している既存の参考文献へのポインタを付け加えます。
timeout=setTimeout('wait();',500);
どうやら、あなたはこれでsleep()
しようとしている:私はこれを考えていない