ツールチップに画像を含める方法と、ツールチップの動き方のパターンです。
動きは「マウスオーバーで出て、マウスの動きに合わせて動く」「画面下から」「画面右から」「回転しながら」の4パターンです。
まずは基本の「マウスオーバーで出て、マウスの動きに合わせて動く」です。
▼以下が実際のソースサンプルです。
$(function() {
//ホバーイベント発火
$("#link:not(:animated)").hover(function(){
$('#tip').show(); //マウスオーバーで表示
}, function() {
$('#tip').hide(); //マウスアウトで非表示
//ここからマウスムーブイベント
}).mousemove(function(e) {
var mousex = e.pageX + 20; //マウスの位置(X座標)を取得
var mousey = e.pageY + 20; //マウスの位置(Y座標)を取得
var tipWidth = $('#tip').width(); //ツールチップの幅を取得
var tipHeight = $('#tip').height(); //ツールチップの高さを取得
var tipVisX = $(window).width() - (mousex + tipWidth);
var tipVisY = $(window).height() - (mousey + tipHeight);
if ( tipVisX < 20 ) { //画面幅を超えた場合はX座標を調節
mousex = e.pageX - tipWidth - 20;
} if ( tipVisY < 20 ) { //画面高さを超えた場合はY座標を調節
mousey = e.pageY - tipHeight - 20;
}
$('#tip').css({ top: mousey, left: mousex });
});
});
▼CSS
body {
overflow: hidden;/*-- 画面外に移動した時にスクロールバーが出ないように --*/
}
#tip, #tip_bottom, #tip_right, #tip_spin {
background-color:#CCC;
display:none; /*-- 基本は非表示 --*/
padding:10px;
position:absolute;
z-index:0;
}
a {
text-decoration:none;
}
▼HTML
<div id="main">
<h1>ツールチップのデモです。</h1>
<p><a href="javascript:void(0);"><span id="link">ツールチップの出るリンク</span><span id="tip" ><img src="images/img1.gif" /><br />
このspanの中身がツールチップ。画像も文字も入れられる</span></a></p>
<p><a href="javascript:void(0);"><span id="bottom">下から出てくる</span><span id="tip_bottom" ><img src="images/img2.gif" /><br />
このspanの中身がツールチップ。画像も文字も入れられる</span></a></p>
<p><a href="javascript:void(0);"><span id="right">右から出てくる</span><span id="tip_right"><img src="images/img3.gif" /><br />
このspanの中身がツールチップ。画像も文字も入れられる</span></a></p>
<p><a href="javascript:void(0);"><span id="spin">回転しながら出てくる</span><span id="tip_spin" ><img src="images/img4.gif" /><br />
このspanの中身がツールチップ。画像も文字も入れられる</span></a></p>
</div>
次は、「画面下からアニメーションで出る」です。
$(function(){
$("#bottom:not(:animated)").hover(function(){
$("#tip_bottom")
.show()//マウスオーバーで表示
.css({//最初のツールチップの場所を指定
"top":$(document).height(),//topをドキュメントの高さにして画面外に
"left":$(this).offset().left + $("#bottom").width()})//リンクの位置と幅の分のleft
.animate({
"top":$("#bottom").offset().top + $("#link").height()//リンクの位置と高さの分を考慮した位置に移動
},"fast");
},function(){
setTimeout(function(){
$("#tip_bottom").animate({
"top":$(document).height()//画面外へ移動
})},"fast")
});
});
bodyにCSSで、overflow: hidden;を記述することで、ツールチップが画面外に移動した時にスクロールバーが出ないようにしています。
次は、「画面右からアニメーションで出る」です。
$(function(){
$("#right:not(:animated)").hover(function(){
$("#tip_right").show()//マウスオーバーで表示
.css({//最初のツールチップの場所を指定
"top":$(this).offset().top,//リンクの高さに合わせたtop
"left":$(document).width()})//leftをドキュメントの幅にして画面外に
.animate({
"left":$("#right").offset().left + $("#right").width()//リンクの位置と幅の分を考慮した位置に移動
},"fast");
},function(){
setTimeout(function(){
$("#tip_right").animate({
"left":$(document).width()//画面外へ移動
})},"fast");
});
});
次は、「回転しながらアニメーションで出る」です。
$(function(){
$('#spin').on('mouseover',spin);
})
function spin() {
$("#tip_spin").show()
.css({
"top":$(this).offset().top,
"left":$(document).width()})
.animate({
'z-index': 1,//z-indexを0から1に変更する
"left":$("#spin").offset().left + $("#spin").width()//同時にリンクの位置と幅の分を考慮した位置に移動
},
{
duration: 2000, //アニメーションの時間
//ステップ中の処理
step: function (num) {//引数num:処理途中の変化している値
//変化する値を使ってちょっとずつ回転させる
$(this).css({
transform: 'rotate(' + (num * -360) + 'deg)'//cssで角度を変える
});
},
//完了時の処理
complete: function () {
$('#tip_spin').css('z-index', 0)//次回のことを考えz-indexを1から0に戻す
}
});
$('#spin').mouseout(function(){
$('#tip_spin').hide()
});
}
z-indexを0から1にアニメーションさせることで、変化するz-indexの値を使って角度を計算して回転させています。
今回、参考にさせていただいたのは、
『iPhoneのようにフリック操作でスクロールできるjQueryプラグインつくった – テクメモ』さん、
『要素を回転させる – jobteck.jp』さんです。
ありがとうございます。
