2010-04-22 4 views
0

Я построил пользовательский ротатор jQuery, используя только базовую анимацию, чтобы повернуть 3 Divs (изображения). Я построил функцию, а затем повторно инициализирую функцию, используя ее в качестве обратного вызова. Вот код:jQuery rotator не вращается правильно - слишком много рекурсии

 
function ImageRotate() { 

    var CurrentFeature = "#container" + featureNumber; 

    $(CurrentFeature).stop(false, true).delay(4500).animate({'top' : '330px'}, 3000); 

    var featureNumber2 = featureNumber-1; 
    if (featureNumber == 1) {featureNumber2=3} 
    var CurrentFeature2 = "#container" + featureNumber2; 
    $(CurrentFeature2).stop(false, true).delay(4500).animate({'top' : '0px'}, 3000); 
    $('#container2').stop(false, true).delay(4500).animate({'top' : '-330px'}, 25); 

    var featureNumber3 = featureNumber+1; 
    if (featureNumber == 3){featureNumber3=1} 
    var CurrentFeature3 = "#container" + featureNumber3; 
    $(CurrentFeature3).stop(false, true).delay(7500).animate({'top' : '0px'}, 3000); 
    $(CurrentFeature2).stop(false, true).delay(4500).animate({'top' : '330px'}, 3000); 
    $(CurrentFeature).stop(false, true).delay(4500).animate({'top' : '-330px'}, 25); 

    if (featureNumber ==1) {featureNumber=3} else{featureNumber--}; 
    $(CurrentFeature).stop(false, true).delay(7500).animate({'top' : '0px'}, 3000); 
    $(CurrentFeature3).stop(false, true).delay(4500).animate({'top' : '330px'}, 3000); 
    $(CurrentFeature2).stop(false, false).delay(4500).animate({'top' : '-330px'}, 25,ImageRotate()); 
}; 

Стоит отметить, что при повторном вызове функции я попытался сделать еще одну функцию, называемую ImageRotate2(); и он сделал то же самое. Это петли, но я получаю всевозможные беспомощности.

Редактировать: Я также пробовал ответы в ответах, и они оба оставляют меня с ошибками рекурсии каждую секунду.

ответ

1

Либо передать в функцию (если вы поставите скобки после нее, это на самом деле называть его прямо там и тогда, и не передавая ссылку на него) ИЛИ гнездо его в определении функции, например:

$(CurrentFeature2).stop(false, false).delay(4500).animate({'top' : '-330px'}, 25,function {ImageRotate()}); 

EDIT:

Вместо вызова функции, попробуйте очереди его с SetTimeout:

..., function() { window.setTimeout(ImageRotate, 1000); }); 
+0

теперь он бросает эту ошибку в firebug «отсутствует (до формальных параметров [Break this this error] $ (CurrentFeature2) .stop (false, true) .... px '}, 25, function {ImageRotate2()}); \ n " –

+0

my bad, needs() сразу после функции и перед открытием { –

+0

ну, он избавляется от ошибки, о которой я прокомментировал, но теперь она бросает ошибки рекурсии каждую секунду –

1

Изменить эту строку:

$(CurrentFeature2).stop(false, false).delay(4500).animate({'top' : '-330px'}, 25,ImageRotate()); 

быть

$(CurrentFeature2).stop(false, false).delay(4500).animate({'top' : '-330px'}, 25,ImageRotate); 

Вы должны передать дескриптор функции, а не в результате вызова функции. =)

+0

К сожалению, это не помогло. Он продолжал давать мне рекурсионные ошибки каждую секунду: [ –

0

Я не понять, почему это не даст вам рекурсию эээ ПРС. Кажется, не существует какого-либо экземпляра, где он перестает называть себя, если только код просто не очищает мои глаза.

Если у вас нет способа для кода прекратить распространение, он вернет ошибку.

Смежные вопросы