2012-01-08 13 views
5

私はdivをスライドさせてホバーすると、マウスがそれぞれ入り、離れるようにしようとしています。しかし、私が何度も出入りしたとき、divは基本的にホバーをやり遂げた回数に前後していた。これはjsFiddle exampleを参照してください。jQueryアニメーション:一度マウスを外してアニメーションを停止する

あなたはおそらく推測したように、何度何回マウスを重ねていても、マウスが要素の外に出ると、divを停止させる(つまり滑らせる)ことを望んでいます。私は、jQueryアニメーションについての理解に欠けているものがあると思います。

$("#state-slider").hover(function() { 
    $(this).animate({ 
    left: '0' 
    }, 500); 
}, function() { 
    $(this).animate({ left: "-270" }, 500); 
}); 

ありがとうございます。

答えて

17

jQuery .stop() functionが必要です。新しいアニメーションを開始する前に、コマンドチェーンに挿入して、進行中のアニメーションを中断します。

$('#state-slider').hover(function() { 
    $(this).stop().animate({ left: 0 }, 500); 
}, function() { 
    $(this).stop().animate({ left: -270 }, 500); 
}); 

Working jsFiddle =)

+0

これは完全に機能します。ありがとうございました!なぜマウス入力時に '.stop()'が必要なのか知っていますか?そうでなければ@ 3nigmaの答えのような "ジャンプ"があるので私はそれを持っている必要があることを知っています。しかし、私はそれの背後にある推論を確信していません。 – moey

+2

@ Siku-Siku.Com:マウス入力とマウス離しの両方で '.stop() 'を使用する理由は、マウスをdivの上に置いて離して移動した後に再び戻すと明らかになります。ユーザーがそれから期待しているのは、 "ターンアラウンド"するdivです。つまり、何をしているのかを止めて、代わりに新しいものをやります。それは正確に '.stop()'がすることです。明確化のために+1 –

+0

+1! – moey

1
$("#state-slider").hover(function() { 
    $(this).animate({ 
    left: '0' 
    }, 500); 
}, function() { 
    $(this).stop(true,true).animate({ left: "-270" }, 500); 
}); 

DEMO

http://api.jquery.com/stop/

+0

ありがとう、@ 3nigma。しかし、マウスが 'div'を入力してすぐに出ると「ジャンプ」することに注意してください。マウス入力時に '.stop()'する必要があると思いますか? – moey

+0

ああ、今すぐ取得しました。「ジャンプ」を防ぐには、 'stop(true、true)'の代わりに 'stop(true)'を使います。 – moey

0

http://jsfiddle.net/amkrtchyan/TQz5U/1/

があります

とjquery code

$(function() { 
    $("#state-slider").hover(function() { 
     $(this).stop(true,true).animate({ 
      left: '0' 
     }, 500); 
    }, function() { 
     $(this).stop(true,true).animate({ left: "-270" }, 500); 
    }); 
}); 
関連する問題