ロールオーバーの実装 最新版。
昔から良く使われている、
ロールオーバーイメージ(人によってはスワップイメージとも)。
今でも良く見かけ、ボタン等の動作に使われる、定番の処理です。
Dreamweaver等のオーサリングツールでは、
この処理のソースを自動的に記述してくれるので、
処理の仕組みを理解していない人は意外と多いかも。
今回はこのロールオーバーイメージを、簡潔かつ、きれいに書いてみます。
通常書く場合は、こんな感じになります。
<a href="#" onmouseover="オーバー時の関数" onmouseout="アウト時の関数"> <img src="#" alt="" width="#" height="#" name="bt" id="bt"></a>
もしくは、
<a href="#" onmouseover="オーバー時の関数" onmouseout="アウト時の関数" onfocus="フォーカス時の関数" onblur="ブラー時の関数"> <img src="#" alt="" width="#" height="#" name="bt" id="bt"></a>
いずれにしても、aタグには複数のイベントハンドラを書く必要があり、
どうしても長くなってしまいます。。
では、これを全て取っ払って、以下のようにしてみましょう。
<a href="#"><img src="#" alt="" width="#" height="#" id="bt"></a>
HTMLソースが、かなりシンプルになり、分かり易いですよね。
さて、取り除いたイベントハンドラはどうすれば良いか?
簡単です。
JavaScriptファイル内で設定してあげましょう。
function rollOver(){ //ロールオーバーの処理を記述 } function setEvent(){ var obj = document.getElementById('bt').parentNode; obj.onfocus = obj.onmouseover = obj.onblur = obj.onmouseout = rollOver; } window.onload = setEvent;
上記のJavascriptを簡単に説明してみます。
まず、最後の行のwindow.onloadにより、
ページ読み込み時にsetEvent関数が実行されます。
そして変数objに、以前までイベントハンドラを記述していたaタグへの
参照先が格納されます。
(id属性が 'bt' の parentNode(親ノード)つまり、ここではaタグ)
次にそのaタグにイベントハンドラを設定します。
これは単純に obj.イベントハンドラ という記述で出来ます。
さらに、そのイベント時に実行する関数を =(イコール)で結んであげます。
setEvent関数の2行目は、以下の記述を1行にまとめたものです。
obj.onfocus = rollOver; obj.onmouseover = rollOver; obj.onblur = rollOver; obj.onmouseout = rollOver;
上記の例では、ロールオーバー時の関数を1つにしているので、
rollOver関数にちょっとした工夫が必要かもしれませんが、
もし分からないようであれば、オーバーとアウトで、
別々の関数を実行すれば良いだけです。
obj.onfocus = rollOver; obj.onmouseover = rollOver; obj.onblur = rollOut; obj.onmouseout = rollOut;
これで、かなりHTMLがきれいになります。
■サンプル rollOver.html
更新版がありますのでどうぞ。
『ロールオーバー(スワップイメージ)の実装 更新版。』