2012-05-03 7 views
0

divアニメーションについて先に質問を投稿しましたが、少し修正しようとしています。私は、ページが読み込まれるときに回転するdivを持っています。その上に乗るとき、私はそれを止めることを望みます。ホバリングしていないときにjqueryアニメーションを停止する

ここ

rotate(); //the function which rotates the div 
$("#div2").hover(function() { 
    $("#div2").stop(); 
});​ 

スクリプトは、ここに私のJSページは

var obj = "div2"; 
var angle = 0; 
var interval = 2323; 
increment = 5; 

function rotate() { 
    $('#' + obj).css({ 
     '-moz-transform': 'rotate(' + angle + 'deg)', 
     'msTransform': 'rotate(' + angle + 'deg)', 
     '-webkit-transform': 'rotate(' + angle + 'deg)', 
     '-o-transform': 'rotate(' + angle + 'deg)' 
    }); 
    angle += increment; 
    setTimeout(rotate, interval); 
}​ 
+1

さて、何が問題なの? – xbonez

+0

ホバリング時に停止しないように明示する必要がありますか? – user1104854

+0

はい、私たちがあなたを助けてくれる他の細部とともに – xbonez

答えて

3

clearTimeout()メソッドを使用しますです。例として:

var obj = "div2"; 
var angle = 0; 
var interval = 100; 
var increment = 5; 
var timer = null; 

function rotate() { 
    $('#' + obj).css({ 
     '-moz-transform': 'rotate(' + angle + 'deg)', 
     'msTransform': 'rotate(' + angle + 'deg)', 
     '-webkit-transform': 'rotate(' + angle + 'deg)', 
     '-o-transform': 'rotate(' + angle + 'deg)' 
    }); 
    angle += increment; 
    timer = setTimeout(rotate, interval); 
} 

$("#div2").hover(function() { 
    clearTimeout(timer); 
}, function() { 
    rotate(); 
}); 

rotate(); //the function which rotates the div​​ 

DEMO:あなたは回転の独自の実装を行っているhttp://jsfiddle.net/Uf9qZ/

+0

私は 'rotate()'関数の中でチェックされ、 'ホバー'とトグルするグローバルブール値を提案しようとしましたが、あなたの解決策ははるかにエレガント。あなたに+1してください。 – DangerMonkey

+0

かなり正しく動作しません。ページが読み込まれたときには回転しませんが、マウスの上にマウスを乗せて戻すと、わずかに回転します(おそらく5度)。 – user1104854

+0

@ user1104854 2.3秒で5%の角度増分があります。時間増分を減少させてください。回答の更新のDEMOを確認してください。 – VisioN

1

、あなたが同様の管理を自分で処理する必要があり、そうsetTimeoutオブジェクトをキャッシュしたときclearTimeoutを使用します。停止する必要があり、それ

+0

それで、clearTimeoutをトリガーする関数を作成できますか? – user1104854

3
var elm = $("#div2"), 
    angle = 0, 
    interval = 2323, 
    increment = 5, 
    T = setInterval(rotate, interval); 

elm.on({ 
    mouseenter: function() { 
     clearInterval(T); 
    }, 
    mouseleave: function() { 
     T = setInterval(rotate, interval); 
    } 
}); 

function rotate() { 
    elm.css({ 
     '-moz-transform': 'rotate(' + angle + 'deg)', 
     'msTransform': 'rotate(' + angle + 'deg)', 
     '-webkit-transform': 'rotate(' + angle + 'deg)', 
     '-o-transform': 'rotate(' + angle + 'deg)' 
    }); 
    angle += increment; 
}​ 

FIDDLE

+0

+1の 'setInterval'バリアント;) – VisioN

+0

ありがとう、これも動作します。徐々にsetinteralを "down"して停止させる方法はありますか? 1から2000まで言って停止しますか? – user1104854

関連する問題