Я написал несколько пользовательских анимационных функций в виде плагинов jQuery, используя setInterval()
для цикла.
Функции, похоже, работают сами по себе, но когда я пытаюсь включить более одной из них вНа той же странице время и эффекты все перепутаны и не отображаются или не завершаются должным образом!
Я провел некоторые исследования в stackOverflow и Google, и из того, что я могу понять, проблема в том, что setInterval
действует как«глобальный» метод / свойство объекта window
, и поэтому, когда у меня есть более одного на странице, они перезаписывают друг друга!
Это правильно?И если да, то каково решение?Что jQuery / плагины делают для управления своими собственными уникальными функциями интервалов?
Мне было интересно, можно ли установить 'local' setInterval
как уникальное свойство для каждого из моих объектов плагинов?
- ИЛИ -
Если мне нужно создать функцию для управления несколькими вызовами анимации из различных плагинов / функций, чтобы совмещать их все одним глобальным вызовом setInterval
- Но я понятия не имею, каксделать это!
Может кто-нибудь помочь, пожалуйста?
---- edit ----
(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);