Javascriptによるロールオーバーイベントの追加

今回は、ロールオーバーの設定を少し楽にするスクリプトを紹介したいと思います。

ロールオーバーとは、皆さん存知だと思いますが、ボタンをポイントしたことをユーザに分かりやすくするために、ボタンの画像を入れ替えるやつです。

方法は2通りあります。Javascriptで<img>タグにonmouseover/onmouseoutイベントを書く方法か、またはCSSでa:hoverを設定して実装する方法です。それぞれの特徴を表にしてみました。

  Javascript CSS
メリット
  • 普及してるため大抵のブラウザで動作する
  • Javascript実行OFF時でも動作する
  • 通常の画像とロールオーバー画像を一枚(あるいはボタンすべてを)にできるため管理しやすい
デメリット
  • Javascript実行OFF時に動作しない
  • 設定によっては何も表示されなくなる
  • 音声ブラウザで読み上げられない場合がある
  • 印刷時に問題となりやすい
マークアップ
  • onmouseover/onmouseoutが連なり、可読性が悪い
  • シンプルで済む
SEO
  • 画像のALT属性は評価されない場合がある
  • テキストとして置けるので有利だが、スパムとみなされる可能性がある

どちらも一長一短あり、Javascript版ではJavascriptを実行OFFの設定にしていると動作せず、CSS版では、CSS動作ONかつ画像表示OFFのときに何も表示されなくなり、displayやvisilityプロパティで非表示にすると音声ブラウザで読み上げられなくなるそうです。またプリントアウトしようと思ったときに、デフォルトが背景画像を印刷しない設定になってるブラウザも多く、ボタンのところが抜け落ちてしまう欠点があります。さらに、どちらにしても一個一個設定しないといけない面倒さがありますよね。

というわけで一番簡単で妥当な解決策として、ロールオーバーイベントを追加するスクリプトを作ってみました。
#あくまで「妥当」です。正統でも正解でもありません。

まず下のファイルをダウンロードしてください。

addevent_rollover.js

次に通常のボタン画像とロールオーバー画像を用意し、"button.gif"、"button_ro.gif"のように元ファイルに_roを付加した名前をつけます。そして、(X)HTMLには通常のボタン画像を普通に<img>タグで設置してください。そして(X)HTMLの<head> ~ </head>タグ内に

<script type="text/javascript" src="addevent_rollover.js" charset="UTF-8"></script>

という一行を追加してください。フォルダ分けされた複数ページで使う場合は、jsファイルの置き場所にあわせてsrc="addevent_rollover.js"の部分を修正してくださいね。

それだけで<a>タグに囲まれた<img>タグをリストアップし、ロールオーバー画像が存在するもののみ、onmouseover/onmouseoutイベントを追加します。ついでにPreload(データの先読み)もしてくれます。

もし画像名を自由に設定したい場合は、

<script type="text/javascript" src="addevent_rollover.js" charset="UTF-8"></script>
<script type="text/javascript">
<!--
	RO_PREFIX = "";
	RO_SUFFIX = "_RO";
// -->
</script>

というように、先ほどの(X)HTMLの<head> ~ </head>タグ内の記述に、RO_PREFIXとRO_SUFFIXの設定を追加してください。RO_PREFIXが元ファイル名の先頭に付く名前、RO_SUFFIXが元ファイル名の後ろに付く名前です。ご覧いただいて分かるように、デフォルトではRO_PREFIXが「」(なし)、RO_SUFFIXが「_RO」に設定されています。例えば、RO_PREFIXを「over_」、RO_SUFFIXを「」(なし)に設定すると、元ボタン名が「button.gif」の場合、「over_button.gif」を探しにいきます。

注意点として、RO_PREFIX/RO_SUFFIXの設定はスクリプトファイルを置いた場所より下に記述してください。直後でなくともかまいませんが、上においた場合はデフォルト設定が優先されます。

付け加えて、このスクリプトも欠点がないわけではなく、<a>タグ内の<img>タグで指定されたファイルをすべてチェックしに行きますので、ロールオーバー画像のないボタンが多い場合、サーバー側のエラーログに404 File not found.エラーが沢山残ります。

それ自体が即問題となるわけではありませんが、不要なエラーを残すのもあまりスマートではないかもしれません。後ほど、それに対する対策を入れたスクリプトも作ってみようかと思います。ただその場合、<img>タグにロールオーバーをつけるつけないの設定が必要になりますので、一個一個設定する手間は必要になります。



そういえば余談ですが、たまーに「オンマウス」って略す方を見かけます。でも、なんだか変ですよぅ。on mouseで切っちゃうと、「マウスの上」ということになり、それはなに?ということになりますです。例えば"your hand on a mouse."(マウスの上においた手)という文章を考えてみると良く分かると思います。それともこれの親戚かしらん?

コメントする

トラックバック(0)

このブログ記事を参照しているブログ一覧: Javascriptによるロールオーバーイベントの追加

このブログ記事に対するトラックバックURL: http://catswhiskers.jp/mt-conf/mt-tb.cgi/14

このブログ記事について

このページは、猫帝が2008年4月12日 18:29に書いたブログ記事です。

ひとつ前のブログ記事は「あにむ 春の新番」です。

次のブログ記事は「Here Come Another Bubble」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

2008年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

AUTHOR

猫帝(白猫♂)です。

穢れを知らない心身を包むのは、白い色の毛皮。もふもふした毛並みは乱さないように、まっすぐ伸ばした尻尾は傾かせないように、ゆっくりと歩くのがここでのたしなみ。

テクノロジーを愛する投資家です。でもアニメとバイオの株は買うなってばっちゃが言ってました。