dポイントプレゼントキャンペーン実施中!

Javascriptの書き方はよく分からない素人です。
いつもソースを探してきて使っているレベルです。
やりたい内容に似たソース(▼以下)を探してきたのですが、
もともと「2枚1組の画像」を2セットずつ表示させるもので、
変更の仕方が分からないので教えていただきたいです。

さらに、「一定時間ごと」ではなく、
「ページを読み込む度」に表示を変えたいです。
(この場合全く違う書き方をすることになるのでしょうか?)

よろしくお願いします。

▼ここから-------------------
<script language="javascript"><!--
setInterval("textch()",3000);
TEXT = new Array('text0','text1','text2');

function textch() {
for(i=0; i<TEXT.length; i++){
var tmpA, tmpB, rnd;
rnd=Math.floor(Math.random() * TEXT.length);
tmpA=TEXT[i];
tmpB=TEXT[rnd];
TEXT[i]=tmpB;
TEXT[rnd]=tmpA;
}
for(j=0;j<TEXT.length;j++) {
document.getElementById(""+TEXT[j]+"").style.display = "none";
if(j == 0 || j == 1) { document.getElementById(""+TEXT[j]+"").style.display = "block"; }
}

}
//--></script>


<div id="text0"><img src="images/a.jpg" alt="A" width="410" height="168"><img src="images/b.jpg" alt="B" width="470" height="168"></div>
<div id="text1"><img src="images/c.jpg" alt="C" width="410" height="168"><img src="images/d.jpg" alt="D" width="470" height="168"></div>
<div id="text2"><img src="images/e.jpg" alt="E" width="410" height="168"><img src="images/f.jpg" alt="F" width="470" height="168"></div>

A 回答 (3件)

No2です。



>欲を言えば、IEで一瞬すべての画像が表示されてしまうことが、
>ちょっと気になりますが
たしかにそうですね。 onload時(画面がレイアウトされてから)にスクリプトを実行しているので、その一瞬だけ表示されてしまいます。
もう少し早く消すようにスクリプトを変えてみましたが、あまり変わりはありませんでした。

画像の初期設定をCSSで非表示にしておけば、それよりは良くなると思います。
サンプルの場合だと
 .rand_1, .rand_2, .rand_A {display:none;}
みたいな感じ。
    • good
    • 0
この回答へのお礼

良くなりました!とても助かりました。
ありがとうございました。

お礼日時:2009/04/26 00:37

少し発想は違いますが…



imgの中で「rand_」で始まるclass名が設定されたものを対象とし、同じclass名のものをセットとして処理します。
2枚1組でも、3枚1組でもかまいません。
どれか一組のみを表示し、残りは非表示となります。

以下、サンプルです。
<html>
<head>
<script type="text/javascript">
window.onload=function() {
var nam={},elm=[];j=0;
var e=document.getElementsByTagName('IMG');
for (var i=0; i<e.length; i++) {
if (e[i].className.substr(0, 5)=='rand_'){
nam[e[i].className]=1; elm[j++]=e[i];
};}

j=0; for (var ky in nam) j++;
j=Math.floor(Math.random() * j);
for (ky in nam) if (j--==0) break;
for (i=0; i<elm.length; i++){
elm[i].style.display=(elm[i].className==ky)?'block':'none';
}
}
</script>
</head>

<body>
<img class="rand_1" src="A.jpg">
<img class="rand_2" src="B.jpg">
<img class="rand_A" src="C.jpg">
<img class="rand_1" src="D.jpg">
<img class="rand_2" src="E.jpg">
</body>
</html>
    • good
    • 0
この回答へのお礼

望んでいる動きになりました。
欲を言えば、IEで一瞬すべての画像が表示されてしまうことが、ちょっと気になりますが、ブラウザの問題かもしれません。
ありがとうございます!

お礼日時:2009/04/24 16:07

前回と絶対に違うものを表示するためには、前回の何を表示したか


覚えておかなくてはなりません。
そうなるとcookieなどの仕組みが必要になりますので、かなり面倒です

同じになる可能性もあるが、とりあえずランダムで表示されればいいや・・・
ということであれば、いまのフローに近いものでよいと思います。

この回答への補足

アドバイスありがとうございます。
後者の「同じになる可能性もあるが、とりあえずランダム表示させたい。」と考えています。

補足日時:2009/04/24 14:33
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!