ちょっとメモ:画像へのマウスオーバーで見出しをスライド表示
- 2011年 9月26日
jQuery を利用して、画像にマウスオーバーすることで見出しをスライド表示するスクリプトを仕事で使う機会があったので、より便利にする改造も含めてご紹介します。
jQueryで画像にマウスオーバーした際見出しをスライド表示する | CSS Lecture
デモページでは様々なバリエーションがありますが、今回仕事で使ったのは2項目の「マウスオーバー時に残りを表示」というもの。
JavaScript は
$(‘.boxgrid.captionfull’).hover(function(){
$(“.cover”, this).stop().animate({top:’220px’},{queue:false,duration:160});
}, function() {
$(“.cover”, this).stop().animate({top:’350px’},{queue:false,duration:160});
})
と書かれており、2行目の
$(“.cover”, this).stop().animate({top:’220px’},{queue:false,duration:160});
の部分はマウスオーバー時の見出しブロックの表示位置(高さ)、4行目の
$(“.cover”, this).stop().animate({top:’350px’},{queue:false,duration:160});
はマウスオーバー解除時のブロックの表示位置(高さ)になります。
ちなみにこのサンプルはミスだと思いますが、初回表示時には見出しの1行目が見えていて、マウスオーバーを解除すると見出しが全て隠れるようになっています。ここの top: '350px' の部分を CSS で設定されている top プロパティの数値を入れてあげると、マウスオーバーを解除しても1行目の見出しを残すことが出来ます。
このスクリプトを利用していて問題になる箇所としては、マウスオーバー時の見出しブロックの表示位置を直接数値で指定しているため、見出しの下の説明文の長さによっていちいち数値を指定しなおさなければならないという欠点があります。そこでロールオーバー時の表示位置を jQuery で計算させることにしました。
jQuery では height() プロパティで指定したブロックの高さを取得することが出来ます。デモでは見出しと説明文を入れているブロックに cover クラスを指定しており、$(".cover", this).height() でイベントの発生したボックスの中にある cover クラスが指定されたボックスの高さを取得します。あとは画像の高さから取得したボックスの高さを引けば、自動的にボックスの高さに合わせた位置にスライドさせることが出来ます。
デモスクリプトの2行目は次のようになります。
$(“.cover”, this).stop().animate({top: 300 – $(“.cover”, this).height()},{queue:false,duration:160});
ここでは画像の高さを直接指定していますが、これも jQuery を使って自動的に取得すればより汎用性の高いものに出来るのではないでしょうか。
Webサイトの品質向上のためのJavaScript+jQueryベーシックマスタ
はじめてjQueryを使う人が、基礎からしっかり学べる入門書。サンプルを使用した丁寧な解説に沿って学習することで、より使いやすいインターフェースと洗練されたデザ...
販売価格: 3,465 円 (2012/5/19 17:16 更新)
販売店舗: 楽天ブックス

