私はtimeline
という定義を持っており、セレクタと、そのオブジェクトに適用する遅延とアニメーションのリストをリストしています。特定のオブジェクトのステップをループするように指定することができます。ここでjQueryのアニメーションの遅延問題がセルフキューにループされています
は、アニメーションをキューに使われている機能である:ここでは
function animateWithQueue(e, obj) {
if ($.queue(e[0]).length == 0) {
e.queue(function doNext(next) {
$.each(obj.steps, function(i, step) {
e.delay(step.pause).animate(step.anim, step.options);
});
if (obj.loop) {
e.queue(doNext);
}
next();
});
}
}
はtimeline
情報
var timeline = {
'.square': {
loop: true,
steps: [
{ pause: 800, anim: { right: '+=200' }, options: { duration: 400} },
{ pause: 1000, anim: { right: '-=200' }, options: { duration: 400} }
]
},
'.circle': {
loop: true,
steps: [
{ pause: 1200, anim: { top: '+=200' }, options: { duration: 400} },
{ pause: 1200, anim: { top: '-=200' }, options: { duration: 400} }
]
}
};
そして、ここでは、上記のアニメーション機能にtimeline
を置く機能である:
$.each(timeline, function(selector, obj) {
animateWithQueue($(selector), obj);
});
完全な例です。 http://jsfiddle.net/sprintstar/Tdads/
このコードは正常に動作するように見える、アニメーションループと停止ボタンはアニメーションを停止するためにクリックすることができ、キューをクリアするなど、我々が直面している問題は、停止を押すことでトリガーされ、何度も起動することができますが(例えば10回)。遅延が正しく機能していないことに気付き、形状がはるかに速く動くようになります。
なぜ、どのように修正できますか?以下のよう
便利かもしれませんあなたは、プログラムのバグを引き起こすことができる方法はありますか?これはデバッグプロセスに役立ちます。 – David
手動停止/開始はアプリケーションの仕組みを反映しています。停止/開始ボタンをクリックすると、前に移動したときに表示されていない遅延の効果を簡単に確認できます。 – Sprintstar
複数開始開始停止開始 http://jsfiddle.net/tjdA3/ 複製: –