マウスを上に置いたときにアニメーション化したいテキストがあります。例:
$(".tabb tr").hover(
function(){
$(this).find("td #headie").animate({marginLeft:'9px'},'slow')
},
function() {
$(this).find("td #headie").animate({marginLeft:'0px'},'slow')
});
これで..行の上にマウスを置いているとき..テーブルの列は少し移動することでアニメーション化します。
ここでの問題は、これらの行の上でマウスカーソルを繰り返し移動してから停止して表示すると、マウスを移動していなくてもアニメーションがしばらく続きます。 ITは後で移動します。
どうすれば止められますか?
ホバー上のスムーズなjqueryアニメーションに関する非常によく書かれた記事は、CSS TricksのChris Coyierによる次の記事でした。
http://css-tricks.com/full-jquery-animations/
これをコードに合わせると、次のようになります。
$(".tabb tr").hover(
function(){
$(this).filter(':not(:animated)').animate({
marginLeft:'9px'
},'slow');
// This only fires if the row is not undergoing an animation when you mouseover it
},
function() {
$(this).animate({
marginLeft:'0px'
},'slow');
});
基本的には、行がアニメーション化されているかどうかを確認し、アニメーション化されていない場合は、マウスエンターアニメーションを呼び出します。
うまくいけば、行はこのページの最後の2つの例のようにいくらかアニメーション化されます。
思い通りに手に入れました。以下は、「animate({marginLeft: '0px'}、0)」に加えた変更です。
以下のコードを確認してください。
$(document).ready(function(){
$(".tabb tr").mouseover(function(){ $(this).find("td #headie").animate({marginLeft:'9px'},'fast') });
$(".tabb tr").mouseout(function(){ $(this).find("td #headie").animate({marginLeft:'0px'},0) });
});
jQueryは必要に応じて特別なeventHandlerを提供します:) mouseenter
およびmouseleave
を使用します
$(".tabb tr").mouseenter(
function(){
$(this).find("td #headie").animate({marginLeft:'9px'},'slow')
});
$(".tabb tr").mouseleave(
function() {
$(this).find("td #headie").animate({marginLeft:'0px'},'slow')
});
ホバーではなくマウスムーブにバインドするだけでなく、$(foo).mouseout(function(){$(this).stop();})
のようなマウスアウトのハンドラーを作成して、アニメーションを終了します。