- ベストアンサー
画像をランダムな座標に一定の時間で表示する方法
javascript勉強中の65歳の初心者です 画像を乱数で得た座標に一定の時間で表示したいと次の通り試行錯誤していますが、どうも最初の1個は表示されますが配列の2番目以降表示されません。 初歩的な質問で恐縮ですがご指導お願いします。 <html> <head> <title>テスト表示</title> </head> <body onload= "set()"> <script language="JavaScript"><!-- sx = new Array(); sy = new Array(); num = 20; var timer; var n; var i; var m; n = 0; function set(){ for (m=0; m<num; m++) { sx[m] = Math.floor(Math.random()*800); sy[m] = Math.floor(Math.random()*600); } setInterval("uncohyouji()", 2000); } function uncohyouji(){ styl = "<img src='unco1.gif'style='position:absolute;"; document.write(styl+sx[n]+"px;left:"+sy[n]+"px;' name='unco1"+n+"'>"); n++; }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ソースを落として実験したら原因が分かりました。 uncohyouji() で、document.write() してますよね。 これは、ドキュメントを真っ白にして書き込むという命令なので、 真っ白にした瞬間に、スクリプトも消えてしまうわけです。 その証拠に、 uncohyouji()内で、 write()したあとに、 alert(); を書いて実行すると、 1回しか表示されません。 よって、writeは、使ってはいけないことになります。 回避策は2つあります。 ひとつは、 <img>に、id="img"という属性を書き、 document.getElementById('img').style.left=sy[n]+'px'; document.getElementById('img').style.top=sx[n]+'px'; とやるか、 document.body.innerHTML="<img src..... とやるかのどちらかです。
- 参考URL:
- http://n.chu.in/1/click.html
その他の回答 (1)
- k0021
- ベストアンサー率26% (32/120)
set() を uncohyouji() に変更したら
お礼
k0021さん有難うございます その方法で試行しました。、そこで、直接乱数発生させて表示させようと思いましたが、結果は同じでした。 私の考えは。先に乱数を発生させて、配列に格納 し、setintervalで表示させようとしています。 方法が誤りか 書き方が誤りか悩んでいます。 宜しくお願いします
お礼
nipox さん有難うございます。 document.writeの意味を理解せずにいました。 初歩的な質問に適切な回答を頂き感謝しています。 今後とも宜しくお願いします。