ウェブの制作で、htmlにちょっと慣れてきたら向かいあう可能性の高い、マウスオンの時の画像切り替えの実装。

自分で把握しているだけで実装方法はいくつかあるが、実際に試してみたのでそのメリットデメリットをメモ。

[adsense]

1.オン用・オフ用の2つの画像をCSSのみで切り替える

aタグのバックグラウンドイメージでオフ用の画像を指定し
マウスオン時に読み込む画像をa:hoverのバックグラウンドで指定する方法。

html

<a class="hoge" src=""></a>

CSS

a.hoge {
 display: block;
 width: 100px;
 height: 100px;
 background: url(/img/hoge_off.png) no-repeat 0 0;
}
a.hoge:hover {
 background: url(/img/hoge_on.png) no-repeat 0 0;
}

●メリット
・JavaScriptなしで動く

●デメリット
・マウスオン時に、画像を読み込むまでの間、瞬間的に画像が何も表示されないことがよくある

[adsense]

2.オン用・オフ用の2つの画像をくっつけた1つの画像を作成し、CSSで表示位置を切り替える

100px x 100px の画像を縦に2つくっつけた、100px x 200pxの画像を作成した場合が以下。

html

<a class="hoge" src=""></a>

CSS

a.hoge {
 display: block;
 width: 100px;
 height: 100px;
 background: url(/img/hoge.png) no-repeat 0 0;
}
a.hoge:hover {
 background: url(/img/hoge.png) no-repeat 0 -100px;
}

●メリット
・JavaScriptなしで動く
・画像切り替えが速くスムーズ

●デメリット
・画像作成の手間がかかる
・ウェブの表示を拡大・縮小したりすると、ブラウザによってマウスオン時の画像の端が、マウスオフ時にも見えてしまうことがある

3.オン用・オフ用の2つの画像を、jQueryで切り替える

今の主流はこれなのでしょうか。

〇〇_off.gifとか〇〇_off.pngという画像あり、そこにマウスオンすると、自動的に
〇〇_on.gifとか〇〇_on.pngに切り替えてくれるという仕様。

html

/*jQuery読込*/
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>

/*画像切り替え実装部分*/
<script type="text/javascript">
$(function(){
     $('a img').hover(function(){
        $(this).attr('src', $(this).attr('src').replace('_off', '_on'));
          }, function(){
             if (!$(this).hasClass('currentPage')) {
             $(this).attr('src', $(this).attr('src').replace('_on', '_off'));
        }
   });
});
</script>

<a href=""><img src="/img/hoge_off.gif" /></a>

●メリット
・実装が楽
・画像切り替え時に画像も消えない

●デメリット
・JavaScriptが動くことが必要
・画像切り替え時にややタイムラグあり(画像をプリロードすることで対処可能)

といったところかなと。