HP作成講座、脱初心者編
文字や画像を動かす。その3
今回はposition:absoluteposition:relativeを使った例を一つずつ!
それでは、まず position:absolute使用例です。
にマウスを当てるとお化けがでる!!

では、これについて説明です。 ソースは、
<head>
<script language="JavaScript">
<!--
var k1=0,ox,oy; //ここで使う変数の用意。kには最初から0をいれる。
function oba(){

if (k1==0){
ox=-100;
oy=250;
document.all.obake.style.display = "";
} else {
ox=ox+6;
oy=oy-4;

}

document.all.obake.style.pixelTop = oy;
document.all.obake.style.pixelLeft = ox;
k1=k1+1; // k1++ と書いても良い!
timerID2=setTimeout("oba()", 50);

if (ox>=250){
obastop();

}

}


function obastop(){
k1=0;
document.all.obake.style.display = "none";
clearTimeout(timerID2);

}


//-->
</script>
</head>

<body>
<span id="obake"
style="font-family:'MS Pゴシック';font-size:30pt;color:#8080ff;
position:absolute;left:-100px;top:250px;
display:none">
〜〜〜(m□□)m
</span>

<span onMouseOver="if(k1==0){oba();}" onMouseOut="obastop();">
<img src="pic/daruma_nahanaha.gif" width="48" height="64" border="0">
</span>にマウスを当てるとお化けがでる!!

</body>
まず、<body>の中には、2つの<span></span>タグがあります。
最初の方には、移動させるお化け(文字)について、スタイルシートで字の大きさや色、表示する位置を決めています。
position:absoluteですから、基準の位置はこのページの左上です。
left:-100pxですから、ページの左端より、さらに左に100ピクセルのところです。
そして、display:none
これは、”〜〜〜(m□□)m”を表示させないようにする指定です。
もし、display:noneを指定しなければ、最初から画面に表示されます。
つまり、あえて表示しないようにしたのです。そして、JAVAスクリプトでdisplay:noneを解除して表示するようにしています。
そして、このタグで囲んだもののidをobakeとしました。
id="obake"
このidをJAVAスクリプトで指定します。

では、その下の<span></span>の方です。
ここでは、だるまの画像を表示させるimgタグを囲んでいます。
onMouseOverで、この画像にマウスが重なったときのこと。
onMouseOutで、この画像からマウスが放れたときのこと。
をそれぞれ、指定しています。

では、JAVAスクリプトの方です。
ひとまとまりにしたプログラム(関数という)は、今回2つあります。
1つはoba()と、obastop()
最初に変数について宣言しています。(変数について参照)
var k1=0,ox,oy;
k1はoba()関数が働くごとに1ずつ増えていきます。つまり、何回その関数が働いたかを数えるために用意しました。
oxはleftの数値用、oyはtopの数値用に用意しました。
oba()見てください。
(見たあとはブラウザの”戻る”で戻ると良いですよ。)
k1=k1+1;というのがあります。
k1は最初0ですが、1度oba()が実行されると、1を足されて(つまり、0+1)、1になります。
そして、timerID2=setTimeout("oba()", 50);で、1000分の50秒後(0.05秒後)に、また、oba()が実行されます。そのときにまたさらに1を足されていきます。
そして、またtimerID2=setTimeout("oba()", 50);があるので、1000分の1秒後にoba()が実行されます。そしてまた、k1に1を足す。・・を繰り返すのです。
そして、k1が0の時、つまり一番最初にoba()が実行されたとき、
if (k1==0){
ox=-100;
oy=250;
document.all.obake.style.display = "";
} else {
ox=ox+6;
oy=oy-4;

}

oxとoyに最初にお化けが出る位置を入れて、
document.all.obake.style.display = "";で、idがobakeの<span></span>のスタイルシートのdisplay:noneを解除しています。(つまり、最初に画面に表示しないと指定したものを解除しています。)
これで、お化け(〜〜〜(m□□)m)が現れます。
if(k==0){・・・}else{・・・}についてはここ参照。)
そして、k1が01でない場合(2回目以降)は、 繰り返されるたびに、oxに6ずつ足します。(6ずつ右に移動する。)
繰り返されるたびに、oyから4ずつ引きます。(4ずつ上に上がる。)
それで、その次のこれが、スタイルシートのleftとtopの数値を変更する部分です。
document.all.obake.style.pixelTop = oy;
document.all.obake.style.pixelLeft = ox;

left、topそれぞれを、ox,oyに変更しています。

そして、
if (ox>=250){

obastop();

}
のところでは、繰り返されるたびにoxに6ずつ出していった結果、oxが250以上になったら、関数のobastop()を実行します。(obastop()参照。)
ここでは、k1を0にしてています。
さらに、oba()で、display:noneを解除しましたが、それをまた、display:noneにします。
clearTimeout(timerID2);で、timerID2=setTimeout("oba()", 50);を、解除します。
つまり、1000分の50秒後に繰り返すのをやめるのです。
そうすると、お化けの動きがストップします。
display:noneに、戻っているのでお化けは画面に表示されずに消えます。
だるまに重ねたマウスカーソルを、だるまから離しても、obastop()が働き、お化けが止まって消えます。これは、この<span>タグに指定したイベントハンドラ、onMouseOut="obastop();"の働きによるものです。
ついでに、onMouseOver="if(k1==0){oba();}"は、
マウスカーソルがだるまに重なったとき、もしk1が0ならoba()を実行すると言うことです。
なぜ、k1が0の時だけ実行するのかというと、k1が0でないときは、すでに今oba()が動いているときだからです。

次にposition:relativeの使用例です。
だるま・ナハナハ
マウスカーソルを重ねると逃げる
ソースは、
<head>
<script language="JavaScript">
<!--
var k=0,v=0,dx=0;
function nigeru(){

document.all.dn.style.pixelLeft = dx;

if (v==0){dx=dx+10;}else{dx=dx-10;}
k=k+1;
timerID=setTimeout("nigeru()",50);
if(k>=24){
k=0;
v= (v==0)?1:0;
clearTimeout(timerID);

}


}

//-->
</script>
</head>

<body>
<table border="1" width="400" align="center">
<tr>
<td align="center" valign="middle" width="50">

</td>

<td width="300">
<div align="center" style="font-family:TT-JTCナミキPOP-MP;font-size:17pt;font-weight:bold;color:#ffd2f9">
だるま・ナハナハ
</div>
</td>

<td align="center" valign="middle" width="50">

</td>
</tr>
<tr>
<td align="center" valign="middle" width="50">

</td>

<td width="300">
<span id="dn"
onMouseOver="if (k==0){nigeru();}"
style="position:relative;left:0px;top:0px">
<img src="pic/daruma_nahanaha.gif" width="48" height="64" border="0">
</span>

</td>

<td align="center" valign="middle" width="50">

</td>


</tr>
<tr>
<td align="center" valign="middle" width="50">

</td>

<td width="300">
<div align="center">
マウスカーソルを重ねると逃げる
</div>
</td>

<td align="center" valign="middle" width="50">

</td>

</tr>
</table>
</body>
そして、解説入り
<head>
<script language="JavaScript">
<!--//JAVAスクリプト始まり。
var k=0,v=0,dx=0;//変数の宣言
function nigeru(){
//ひとまとまりのプログラムにnigeru()という名前を付ける。
document.all.dn.style.pixelLeft = dx;
//idがdnの部分のleftの位置はdx。
// dxには最初0が入っている。
if (v==0){dx=dx+10;}else{dx=dx-10;}
//もしvが0だったら、dxには10を足す。(10ピクセル右に移動)
//vが0でなければ、dxから10を引く。(10ピクセル左に移動)
k=k+1;//この関数nigeru()が、実行されるたびに1を足していく。

timerID=setTimeout("nigeru()",50);
//1000分の50秒後に、nigeru()を実行する。
if(k>=24){//もしkが24を越えたら・・
k=0;//kは0
v= (v==0)?1:0;//vが0ならvを1に、vが0でないならvを0に!参照
clearTimeout(timerID);
//タイマーを止める。つまり繰り返さなくなる
} //このように24回やると動きが止まる。


}

//ここまでJAVAスクリプト。
//-->
</script>
</head>

<body>
<!--ここからはだるまの周囲のテーブルタグ-->
<table border="1" width="400" align="center">
<tr>
<td align="center" valign="middle" width="50">

</td>

<td width="300">
<div align="center" style="font-family:TT-JTCナミキPOP-MP;font-size:17pt;font-weight:bold;color:#ffd2f9">
だるま・ナハナハ
</div>
</td>

<td align="center" valign="middle" width="50">

</td>
</tr>
<tr>
<td align="center" valign="middle" width="50">

</td>

<td width="300">
<!--ここは、このテーブルのちょうど真ん中のセル。
ここにposition:relativeで指定してだるまの画像を置く。
すると、このセルの左上が基準の位置になる-->
<span id="dn"
onMouseOver="if (k==0){nigeru();}"
style="position:relative;left:0px;top:0px">
<img src="pic/daruma_nahanaha.gif" width="48" height="64" border="0">
</span>

</td>

<td align="center" valign="middle" width="50">

</td>


</tr>
<tr>
<td align="center" valign="middle" width="50">

</td>

<td width="300">
<div align="center">
マウスカーソルを重ねると逃げる
</div>
</td>

<td align="center" valign="middle" width="50">

</td>

</tr>
</table>
</body>
だるまが止まっているときは、kは0になっています。
だるまにマウスカーソルが重なると、kが0の時なら、nigeru()が実行され、だるまが動きます。
onMouseOver="if (k==0){nigeru();}"がだるまの画像を囲む<span></span>に設定されています。
nigeru()は、その中のtimerID=setTimeout("nigeru()",50);の働きで、次々に繰り返されていき、その都度kに1ずつ足していきます。
だから、だるまが動いている間は、kは0ではありません。
そのときにマウスカーソルがだるまに重なっても何も影響しません。

vが0の時はだるまは左から右に動きます。
最初はvは0にしています。つまり、最初は左から右に動くようにしています。
nigeru()が繰り返されるたびに、だるまは10ピクセルずつ右に動きます。
そして、1ずつ足されてきたkが24になると止まります。
止まるついでに、kを0にしておき、vを、1にします。
次にnigeru()が実行されるときは、vが1になっていますので、今度はだるまは右から左に動きます。
if (v==0){dx=dx+10;}else{dx=dx-10;}
は、vが0の時はdxに10足します。vが0でないときはdxから10を引きます。
そして、この右から左への動きも24回で止まります。
止まるついでに、vを0にします。(次は左から右だ!)
kも0にします。
PC−Parkトップ
心の話サイコロTown!




広告 [PR]  再就職支援 冷え対策 わけあり商品 無料レンタルサーバー