HP作成講座、脱初心者編
JAVAスクリプトで文字を操作する。その1
今回は、スタイルシートをJAVAスクリプトで文字の大きさと色を操作するお話です。
下の”大きさが変わる””色が変わる”をクリックしてみてください。
サイコロTown!
|大きさが変わる!| |色が変わる!|

では早速ソースから!
<script language="JavaScript">
<!--
var s=12,k=0;//sは文字の大きさの数値を代入する変数。最初は12。
c = new Array(0,0,0);
var f1=0,f2=0,f3=0;
c16 = new Array("00","00","00");

function ookisa(){

document.all.moji.style.fontSize = s+"pt";
s=s+1;

timerID=setTimeout("ookisa()",40);

if (s>60){
clearTimeout(timerID);
}

}

function iro() {
document.all.moji.style.color = "#"+c16[0]+c16[1]+c16[2];

switch(f1){
case 0:
if (c[0]+2>255){c[0]=255;f1=1;} else{c[0]=c[0]+2;}
break;
case 1:
if (c[0]-7<0){c[0]=0;f1=0;} else{c[0]=c[0]-7;}
break;

}

switch(f2){
case 0:
if (c[1]+5>255){c[1]=255;f2=1;} else{c[1]=c[1]+5;}
break;
case 1:
if (c[1]-5<0){c[1]=0;f2=0;} else{c[1]=c[1]-5;}
break;

}

switch(f3){
case 0:
if (c[2]+7>255){c[2]=255;f3=1;} else{c[2]=c[2]+7;}
break;
case 1:
if (c[2]-2<0){c[2]=0;f3=0;} else{c[2]=c[2]-2;}
break;

}

for(i=0;i<3;i++){
c16[i]=c[i].toString(16);
if (c16[i].length==1){
c16[i]="0"+c[i].toString(16);
}
}

k=k+1;
timerID2=setTimeout("iro()",30);
if (k>280){clearTimeout(timerID2);}
}
//-->
</script>
</head>
<body>
<div align="center" id="moji" style="font-family:'MS Pゴシック';font-size:12pt;color:#000000;font-weight:bold">サイコロTown!</div>
<a href="#" onClick="s=12;ookisa();">|大きさが変わる!|</a>
<a href="#" onClick="k=0;iro();">|色が変わる!|</a><br>

</body>

まずは、<body>〜</body>の中の
<div align="center" id="moji" style="font-family:'MS Pゴシック';font-size:12pt;color:#000000;font-weight:bold">サイコロTown!</div>
から、見ていきましょう。
中央寄せで、サイコロTown!と記述しているタグです。
スタイルシートで文字の種類はMS Pゴシック、文字の大きさは12ポイント、文字の色は#000000(つまり黒)と言うように指定しています。
このうち文字の大きさと色をJAVAスクリプトで操作しようと言うわけです。
まずは、大きさの操作から! <head>〜</head>に書いてあるJAVAスクリプトの中から、ookisa()と名付けた関数を見てください。
function ookisa(){

document.all.moji.style.fontSize = s+"pt";
s=s+1;

timerID=setTimeout("ookisa()",40);

if (s>60){
clearTimeout(timerID);
}

}
この中で、実際にスタイルシートのfont-sizeを指定する働きをしているのは、
document.all.moji.style.fontSize = s+"pt";の部分です。
idにmojiと名付けたタグのスタイルシートのfont-sizeを設定する働きをしています。
sは変数です。最初に12という数字が入っています。
それに"pt"という文字列を足すと"12pt"という文字列になります。
−−−−−−−−−−−−注−−−−−−−−−−−−−−−−−−−−−−−
JAVAスクリプトでは、
数字の12と12を足すと・・12+12は数字の24になります。
文字の”12”と”12”を足すと・・”12”+”12”は文字の”1212”になるのです。
そして、数字の12と文字の”pt”を足すと・・12+”pt”は文字の”12pt”になります。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
そして、その次に
s=s+1で、sを1増やします。
それから、タイマーで1000分の40秒後に、この関数を繰り返します。
timerID=setTimeout("ookisa()",40);
if (s>60){
clearTimeout(timerID);
}

そして、sが60になったら繰り返しが終わります。
という感じで12ポイントから59ポイントまで1ポイントずつ大きくなっていきます。
このookisa()と名付けた関数は本文中の、
<a href="#" onClick="s=12;ookisa();">|大きさが変わる!|</a> をクリックすると始まります。
onClick="s=12;ookisa();"は、
onclickはここをクリックしたとき。
そして、その後にJAVAスクリプトを書きます。この場合はsを12にして、ookisa()という関数を働かせると言うことです。
さて、次に色を変化させるJAVAスクリプトです。
<div align="center" id="moji" style="font-family:'MS Pゴシック';font-size:12pt;color:#000000;font-weight:bold">サイコロTown!</div>
のところで、最初、色は#000000(黒)にしています。
そしてこれは、赤、緑、青をそれぞれ2桁の16進数で表していますね。(参照)
この赤青緑をそれぞれ別々に操作するために、変数をそれぞれに用意します。
c = new Array(0,0,0);//赤、緑、青それぞれの値(10進数)を入れる配列
var f1=0,f2=0,f3=0;
c16 = new Array("00","00","00");//赤、青、緑それぞれの値を16進数で表した文字列を入れる配列
配列についてはここを参照

色を変化させるのは、関数iro()で行っています。 そして、その中でも実際に色を変更する命令は、
document.all.moji.style.color = "#"+c16[0]+c16[1]+c16[2];です。
この部分に赤、緑、青のそれぞれの値を"#□□□□□□"という形の文字列になるようにすればいいわけです。
最初、c16[0]には"00"、c16[1]には"00"、c16[2]には"00"、がそれぞれは言ってますから、
"#"+"00"+"00"+"00"となります。これは"#000000"ですね。

と言うわけで、関数iro()のソースです。
function iro() {
document.all.moji.style.color = "#"+c16[0]+c16[1]+c16[2];

switch(f1){//赤の値c[0]の計算(10進数)
case 0:
if (c[0]+2>255){c[0]=255;f1=1;} else{c[0]=c[0]+2;}
break;
case 1:
if (c[0]-7<0){c[0]=0;f1=0;} else{c[0]=c[0]-7;}
break;

}

switch(f2){//緑の値c[1]の計算(10進数)
case 0:
if (c[1]+5>255){c[1]=255;f2=1;} else{c[1]=c[1]+5;}
break;
case 1:
if (c[1]-5<0){c[1]=0;f2=0;} else{c[1]=c[1]-5;}
break;

}

switch(f3){//青の値c[2]の計算(10進数)
case 0:
if (c[2]+7>255){c[2]=255;f3=1;} else{c[2]=c[2]+7;}
break;
case 1:
if (c[2]-2<0){c[2]=0;f3=0;} else{c[2]=c[2]-2;}
break;

}

for(i=0;i<3;i++){//10進数の赤、青、緑の数値を16進数形式の文字列に。
c16[i]=c[i].toString(16);
if (c16[i].length==1){//一桁の時は、文字の0をつけて2桁に。
c16[i]="0"+c[i].toString(16);
}
}

k=k+1;//繰り返すたびに1ずつ足している。
timerID2=setTimeout("iro()",30);//1000分の30秒後に繰り返し
if (k>280){clearTimeout(timerID2);}
//もし、kが280以上になったら繰り返しをやめる。
}

では、色を計算している部分です。
これは、赤い色を計算している部分です。
switch(f1){//赤の値c[0]の計算(10進数)
case 0:
if (c[0]+2>255){c[0]=255;f1=1;} else{c[0]=c[0]+2;}
break;
case 1:
if (c[0]-7<0){c[0]=0;f1=0;} else{c[0]=c[0]-7;}
break;

}

この部分では、赤の値が最初は0ですが、それが2ずつ増えていって、255を越えると今度は7ずつ減っていきます。
そしてまた、0より小さくなると2ずつ増えていきます。これを繰り返すようになっています。 赤い色は#のあと、00からffまでの2桁の16進数で指定しますね。
10進数では0から255に相当します。
そして、これを計算している部分は2つあります。
c[0]=c[0]+2;←赤の値に2を足す。
c[0]=c[0]-7;←赤の値から7を引く。
色の指定は0から255までだから、0より小さくなってしまったときや、255より大きくなってしまったときのために、
if (c[0]+2>255){c[0]=255;f1=1;} else{c[0]=c[0]+2;}
赤の値c[0]に2を足したときに、
255より大きかったら、赤の値c[0]は255にして、さらにf1を1にする。
255より大きくなかったら赤の値c[0]に2を足す。
という意味です。
そして、f1の値によって計算する式を変えています。
それが↓これ。(参照)
switch(f1){
case 0:
・・・・f1が0の時はここを行う。
break;

case 1:
・・・・f1が1の時はここを行う。
break;

}
だから、f1が1になると、
if (c[0]-7<0){c[0]=0;f1=0;} else{c[0]=c[0]-7;}
の方を実行することになります。
今度は7ずつ赤の値を減らしていきます。
そして、赤の値から7引いたものが、0よりも小さくなると、赤の値を0にしてf1を0にします。
そうすると、今度は赤の値を2ずつ足していく方が実行されます。
このように、0→255、255→0、と言うふうに増えていったり減っていったりしています。

あと、緑の値、青の値もそれぞれ同じような方法でやっています。
このように赤、緑、青それぞれの値を変化させて、次にそれぞれを16進数で表される文字列に変換します。
それが、↓この部分!
for(i=0;i<3;i++){//10進数の赤、青、緑の数値を16進数形式の文字列に。
c16[i]=c[i].toString(16);
if (c16[i].length==1){//一桁の時は、文字の0をつけて2桁に。
c16[i]="0"+c[i].toString(16);
}
}
toString()は、数値を文字列に変換する働きをします。
( )ないに何も入れなければ、10進数で表される文字列に変換します。
(16)と言うふうに16を入れると16進数で表される文字列に変換します。
c16[i]=c[i].toString(16);では、c16[i]にc[i]を16進数で表した文字列を代入しています。
そして、iは0、1、2という値を取りながら3回繰り返します。(参照)
つまり、
c16[0]=c[0].toString(16);
c16[1]=c[1].toString(16);
c16[2]=c[2].toString(16);
というふうに、赤、緑、青それぞれの値を16進数の文字列にしているのです。

ところで、カラーコードは赤、青、緑それぞれが2桁の16進数で表します。
1桁になったときには、それを2桁の文字列にする必要がありますね。
if (c16[i].length==1){//一桁の時は、文字の0をつけて2桁に。
c16[i]="0"+c[i].toString(16);
}

そこで、1桁の時に文字の"0"を加えて2桁に変えます。
c16[i].lengthは、c16[i]の桁数が何文字かを表します。
後は、タイマーでkが279になるまで繰り返しです。 timerID2=setTimeout("iro()",30);//1000分の30秒後に繰り返し
if (k>280){clearTimeout(timerID2);}


このように関数iro()を作っておいて、本文中の
<a href="#" onClick="k=0;iro();">|色が変わる!|</a>
これで、|色が変わる!|をクリックするとkを0にして関数iro()を実行します。
PC−Parkトップ
心の話サイコロTown!




広告 万馬券 無料レンタルサーバー ブログ blog