ループのためにsetInterval()
を使用してjQueryプラグインとしていくつかのカスタムアニメーション関数を書きました。複数のJavascript setInterval関数を同じページでうまく組み合わせるにはどうすればよいですか?
機能はそれ自身で正常に動作するようですが、同じページに複数の機能を組み込もうとすると、タイミングとエフェクトがすべて乱れて正しくレンダリングされません。
私はStackOverflowの上の周りにいくつかのスカウトが行われ、Googleと私が集まることができるものから問題があるしていること、私はページ上の複数あるwindow
オブジェクトなどの「グローバル」メソッド/プロパティとしてsetInterval
行為彼ら最終的にお互いを上書きする!
これは間違いありませんか?そしてもしそうなら、解決策は何ですか?独自のインターバル機能を管理するためにjQuery /プラグインは何をしていますか?
「ローカル」setInterval
を各プラグインオブジェクトの一意のプロパティとして設定できるかどうかは疑問でしたか?
- OR -
私は1回のグローバルsetInterval
呼び出しでそれらすべてを両立させるために、様々な異なるプラグイン/機能からの複数のアニメーションのコールを管理するための関数を作成する必要がある場合 - しかし、私は何をするか見当がつかないこの!
誰でも助けてください。
----編集----
(function($){
$.fn.scroller = function(options) {
var defaults = {
direction: 'left',
distance: '',
duration: 2000,
interval: 2000,
type: 'linear',
startPos: '0'
};
var options = $.extend(defaults, options);
return this.each(function() {
parent = $(this).children('.scroller');
$this = parent.children().first();
// console.log(parent);
// console.log($this);
var o = options;
var m = '';
if(o.direction === 'left') m = 'marginLeft';
if(o.direction === 'right') m = 'marginRight';
if(o.direction === 'up') m = 'marginTop';
if(o.direction === 'down') m = 'marginBottom';
// console.log('Distance: ' + o.distance);
// console.log('Duration: ' + o.duration);
// console.log('Type: ' + o.type);
// console.log('Start Pos: ' + o.startPos);
// console.log('Interval: ' + o.interval);
setInterval(function(){
$this.animate({
m : o.distance
},
o.duration,
o.type,
function() { // OnComplete
$this.stop().css(m, o.startPos).appendTo(parent);
});
}, o.duration+o.interval);
});
};
})(jQuery);
なぜjqueryの内部タイミングを使用しないのですか? –
好きなだけ間隔を設定できます。競合が発生するのは、a)インターバルコールバックでグローバル変数を使用するか、またはb)コールバックのパフォーマンスが悪いためです。 –
@DanielAWhite jQueryを使用してsetTimeoutをエミュレートすることが過剰です。 – Raynos