вращатель jQuery не вращается должным образом - слишком много рекурсии - PullRequest
0 голосов
/ 22 апреля 2010

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

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 ();и он сделал то же самое.Это зацикливается, но я получаю всевозможные забавы.

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

Ответы [ 3 ]

1 голос
/ 22 апреля 2010

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

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

EDIT:

Вместо вызова функции попробуйте поставить ее в очередь с помощью setTimeout:

..., function() { window.setTimeout(ImageRotate, 1000); });
1 голос
/ 22 апреля 2010

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

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

будет

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

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

0 голосов
/ 22 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...