- 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に戻し、 ボタンを押せるようにします。
このテクニックを使えば、文字色をグラデーションみたいに変化させることもできます。 いろいろと試してみると面白いと思います。