- HOME
- JavaScript入門
- 文字の色を変更する[DOM]
ここからは、様々なスタイルを変更する方法について見ていきます。 最初は文字色を変更する方法について解説します。
文字色を変更するスクリプト
では文字色を変更してみます。 以下のスクリプトをHTMLのbody内に記入して見てください。
<div id="col">文字色が変わります</div> <form> <input type="button" value="赤文字" onclick="chgColor()"> </form> <script type="text/javascript"> <!-- function chgColor() { if(document.getElementById) { document.getElementById("col").style.color = "red"; } } // --> </script>
<サンプル>
様々なスタイルを変更するには、document.getElementById()の後にstyleを付け、 その後変更するスタイルを指定します。色を変更するには、colorを使います。
- document.getElementById("id名").style.color =
- 文字色を変更します。右辺にはカラー名もしくはカラーコードを指定します。
文字を徐々に浮かび上がらせる
では文字色を変更するテクニックを使って、 徐々に文字を浮かび上がらせてみたいと思います。 映画のラストで「おわり」という文字が浮き上がって、その後消えるような演出がありますが、 それをDOMとタイマーで実装してみます。
<div id="end">おわり</div> <form name="btn"> <input type="button" value="タイマー開始" onclick="tmStart()"> </form> <style type="text/css"> <!-- div#end { font-size:50pt; text-align:center; color:black; background-color:black; border:1px solid gray; } --> </style> <script> var cnt=0; var timer1; function tmStart() { var col16,obj; if(document.getElementById) { //最初にボタンを押せなくする if (cnt == 0) { document.btn.elements[0].disabled=true; } //document.getElementById()の省略 obj = document.getElementById("end"); //最初の1.6秒で文字を黒→白に変更する if (cnt < 16) { col16 = cnt.toString(16); obj.style.color="#"+col16+col16+col16; } //3.2秒後に文字を白→黒に変更する if (cnt > 48) { col16 = (64-cnt).toString(16); obj.style.color="#"+col16+col16+col16; } cnt++; if (cnt <= 64) { //関数tmStart()を0.1秒間隔で呼び出す timer1=setTimeout("tmStart()",100); } else { //6.4秒後にタイマーを停止し、ボタンを押せるようにする clearTimeout(timer1); cnt=0; document.btn.elements[0].disabled=false; } } } </script>
スクリプトの説明
HTML部分
文字「おわり」をdivタグで囲い、id属性を付けます。id名は「end」にしました。 またフォームの中にボタンを一つ設置して、タイマーを起動させるようにしています。
スタイルシート部分
divタグのスタイルを指定しています。 divの後の「#」はidのことで、id名「end」が付いたdivタグのみスタイルを指定しています。 スタイルの意味合いは、上から順に以下のようになっています。
- 文字サイズを50ptにする
- 文字列を中央揃えにする
- 文字色を黒にする
- 背景を黒にする
- 周りの枠線を1ptで灰色の実線にする
JavaScript部分
最初にグローバル変数cntとtimer1を宣言します。 変数cntは時間のカウントと共に、カラーコードに使う数値にも利用します。 変数timer1はタイマーをセットします。
関数tmStart()
関数tmStart()の最初に変数col16とobjを宣言しています。 変数col16はカラーコードに使う16進数の文字を入れます。 変数objはdocument.getElementById()を省略するために使います。
if(document.getElementById)
if文を使ってdocument.getElementByIdが使えるかどうか確認しています。 使用できる場合のみ、文字色を変える処理を続けます。
変数cntが0の時
cntが0の時、つまりボタンを押してすぐの状態の時に、ボタンを禁止状態にします。 タイマー稼働中にボタンを押すと不都合が生じるので、ボタンを押せなくするのです。
document.getElementById()を省略する
今回はdocument.getElementById("end")が2回出てくるので、 変数objに代入して省略できるようにします。
変数cntが16未満の時
変数cntが16未満の時は、文字色を黒(#000)から白(#FFF)に徐々に変更していきます。 文字色のコード部分は変数cntの数字を利用します。カラーコードは16進数で表すので、 toString(16)で16進数に変換し、変数col16に代入します。変数cntが15の時、 16進数に直すと「F」になります。 それで"#"+col16+col16+col16は「#FFF」ということになります。
変数cntが48より大きい時
変数cntが16~48の間は、色を変化させません。その後、色を徐々に消していきます。 カラーコードにすると、「#FFF」から「#000」に変更していきます。 (64-cnt).toString(16)とすることで、16段階を経てF→0になります。
変数cntを+1して繰り返す
色を変化させてから変数cntを+1し、setTimeout()を使って繰り返します。 繰り返し間隔は0.1秒(1秒で10回繰り返し)です。 つまり文字が完全に表示されるまで1.6秒、文字が変化しないのが3.2秒、 文字が消えていくのが1.6秒、合計6.4秒です。
完全に文字が消える(文字色が#000)のが、cnt=64の時です。 完全に文字が消えたらタイマーを停止し、カウント変数cntを0に戻し、 ボタンを押せるようにします。
このテクニックを使えば、文字色をグラデーションみたいに変化させることもできます。 いろいろと試してみると面白いと思います。