人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascriptの不具合(?)についてです。
下記ページで背景をランダム表示させているのですが、
ieitsu.jugem.jp
何度か読み込んでみると、真っ白になるときがあります。
javascriptの書き方に問題があるのでしょうか?
何のせいでしょうか?

よろしくお願いします

●質問者: unagiinu
●カテゴリ:ウェブ制作
✍キーワード:.jp JavaScript JUGEM ランダム 不具合
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● rikuba
●23ポイント
myimg=myimgs[Math.floor(Math.random()*(myimgs.length+1))];

この+1は不要です。

真っ白になっていたのは、myimgs[4]という存在しない要素(undefined)をbackgroundに設定してしまっていたからです。


myimgsは、添え字0?3の4つの要素を持っており、myimgs.lengthは要素数である4を返します。

算出したいランダムな数値は0?3ですので、Math.floor(Math.random() * myimgs.length)で十分です。


2 ● lkaitol
●23ポイント

http://q.hatena.ne.jp/1279806968 <- dummy

HPを拝見させていただきました。

<script type="text/javascript"> </p> <p><!--</p> <p>myimgs=Array();</p> <p>myimgs.push("<a href="http://members.jcom.home.ne.jp/unagiinu/moto/1983786a.jpg" target="_blank">http://members.jcom.home.ne.jp/unagiinu/moto/1983786a.jpg</a>");</p> <p>myimgs.push("<a href="http://members.jcom.home.ne.jp/unagiinu/moto/e93cb658.JPG" target="_blank">http://members.jcom.home.ne.jp/unagiinu/moto/e93cb658.JPG</a>");</p> <p>myimgs.push("<a href="http://members.jcom.home.ne.jp/unagiinu/moto/20100722_154714.jpg" target="_blank">http://members.jcom.home.ne.jp/unagiinu/moto/20100722_154714.jpg</a>");</p> <p>myimgs.push("<a href="http://members.jcom.home.ne.jp/unagiinu/moto/7c31dff6.jpg" target="_blank">http://members.jcom.home.ne.jp/unagiinu/moto/7c31dff6.jpg</a>");</p> <p>myimg=myimgs[Math.floor(Math.random()*(myimgs.length+1))];</p> <p>document.write("<sty"+"le>");</p> <p>document.write("body{background:url("+myimg+");}background-repeat: no-repeat;background-attachment:fixed;background-position:;}");</p> <p>document.write("</sty"+"le>");</p> <p>// --></p> <p></script>

ですが、

myimg=myimgs[Math.floor(Math.random()*(myimgs.length+1))];

ここがおかしいですね。

myimg=myimgs[Math.floor(Math.random()*(myimgs.length))+1];

ではないでしょうか?


3 ● jayce1
●22ポイント

ランダムの数値の生成方法に誤りがあります。

生成された数値が4になると、画像が読み込めずに真っ白になっています。


画像を格納する配列が、0番目、1番目、2番目、3番目の計4つしかないにもかかわらず

無いはずの「4番目」を指定しているのがこの現象の原因です。


■修正前

Math.floor(Math.random()*(myimgs.length+1))


■修正後

Math.floor(Math.random()*(myimgs.length))


4 ● yamaneroom
●22ポイント

myimg=myimgs[Math.floor(Math.random()*(myimgs.length+1))];

この部分のロジックがおかしい。

なぜ "myimgs.length+1" なのか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ