4.画像を使いこなせ |
(しばらく経過)さあ、画像は用意できましたか? それではまず、画像の番号について説明しましょう。フォームの時の話で、部品番号というのがありましたが、画像の場合にも画像番号というのが存在します。ページ内に画像を置いた順番に、0,1,2…と順番につきます。
ここで注意しないといけないのは、geocities のように、ホームページによってはページの先頭にバナー広告が出てくる場合です。このバナーが画像の場合、他のものと同様に画像番号がカウントされてしまうので、「自分のパソコン上では動くがアップロードしたとたんに変な動きをしてしまう」といった事態が発生します。対策としては、バナー広告も考慮してプログラムを組む(ただし自分のパソコン上で変な動きをしてしまいます)か、別のプロバイダへ引っ越す(笑)などの方法があります。
document.images[画像番号].src = "ファイル名";
のようにします。ただし、この方法は命令を実行するたびに画像をダウンロードしてきてしまうので、オフラインで遊んでいるときや、回線が混んでいるときはなかなか変更しません。そこで、ページを読み込んでいるときに、変更する画像もあらかじめ読み込んでおきましょう。
<script language="JavaScript">
function imgload(){
pl1=new Image(20,20);pl1.src="pl4.gif";
pl2=new Image(20,20);pl2.src="pl2.gif";
pl3=new Image(20,20);pl3.src="pl1.gif";
pl4=new Image(20,20);pl4.src="pl3.gif";
for(i=1;i<=6;i++) document.images[31+i].src=eval("logo"+i+".src");
for(i=7;i<=12;i++) document.images[45+i].src=eval("logo"+i+".src");
loadFlag=true;
gameFlag=true;
}
</script>
<body onLoad="imgload();" bgcolor="#DAFFDA">
... |
3行目、pl1=new Image(20,20);pl1.src="pl4.gif"; の命令が、実際にプレロードを行っている部分です。書き方は、
変数 = new Image(画像の横幅,画像の縦幅);
変数.src = "ファイル名";
です(2つの文から成り立っています)。画像の縦幅、横幅の単位はピクセル(pixel)です。
実際に画像を変更したいときは、
document.images[画像番号].src = 変数.src
になります。上の例では分かりにくいですが、for文の中で実行しています(evalについては、「配列/evalを使いこなせ」で)。
この命令はページのロードとほぼ同時にやらないと意味がないので、onLoad のイベントハンドラを使って実行しています。
<html><head>
<script language="JavaScript">
var aite;
var message;
var loadFlag=false;
function imgload(){
hand0=new Image(20,20);hand0.src="guu.gif";
hand1=new Image(20,20);hand1.src="choki.gif";
hand2=new Image(20,20);hand2.src="paa.gif";
loadFlag=true;
}
function clickhere(){
if(loadFlag){
aite=Math.floor(Math.random()*3+1);
var n=0;
if(document.form1.elements[0].selectedIndex==0){ //グーが選択された
document.images[0].src=hand0.src;
}
if(document.form1.elements[0].selectedIndex==1){ //チョキを選択
document.images[0].src=hand1.src;
}
if(document.form1.elements[0].selectedIndex==2){ //パーを選択
document.images[0].src=hand2.src;
}
n=document.form1.elements[0].selectedIndex+1; //勝敗判定に利用
if(aite==1) document.images[1].src=hand0.src;
if(aite==2) document.images[1].src=hand1.src;
if(aite==3) document.images[1].src=hand2.src;
if(n==aite) message="あいこです";
else {
if((n+1)%3==aite%3) message="あなたの勝ち";
else message="相手の勝ち";
}
document.form1.elements[2].value=message;
}
}
</script></head>
<body onLoad="imgload()">
じゃんけん大会! 自分の手を選択したら「勝負」を押してね。<br>
<form name="form1">
<select><option>グー<br>
<option>チョキ<br>
<option>パー<select><br>
<input type=button onClick="JavaScript:clickhere();" value="勝負"><br><br>
あなたの手 <img src="guu.gif"><br>
相手の手 <img src="guu.gif"><br>
結果 <input type=text><br>
</form></body></html> |