だから私はあなたのフィドルを編集しました、そしてこれがあなたが期待する振る舞いであることを願っています。また、最初のバージョンのように「ジャンピー」ではなくなりました。
3つの新しい変数を作成しました。
var hovered = false;
var animating = false;
var correction = null;
1つ目は、要素の1つがホバーされたかどうかを格納し、2つ目はアニメーションが実行されているかどうかを格納し、3つ目は修正を使用する必要があるかどうかを格納します(左側またはライド側)。
何が起こっているかを追跡するために関数を更新したよりも:
$carouselNext.hover(function () {
if (!animating)
shunt('-=20');
hovered = true;
correction = 'next';
}, function () {
if (!animating)
shunt('+=20');
hovered = false;
correction = 'next';
});
クリックハンドルを更新したよりも:
$carouselNext.bind('click', function(e) {
move(0);
e.preventDefault();
});
そしてmove()
-関数:
function move(dir, par) {
if(!animating) {
animating = true;
if(dir == 0) {
carousel.next();
} else {
carousel.prev();
}
setTimeout(function() {
shunt( ( hovered ? '+=0' : ( 'next' == correction ? '+' : '-' ) + '=20' ) );
animating = false;
}, 1700);
}
}
これがデモです-私が更新したすべてのものを手に入れてください。
デモ
jsfiddle
注:最初からの変数は、内で宣言できますfunction carousel_initCallback(carousel)
-どういうわけか、フィドルに格納されていませんでした…</ p>