ウェブの制作で、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が動くことが必要
・画像切り替え時にややタイムラグあり(画像をプリロードすることで対処可能)
といったところかなと。