2010-04-22 4 views
0

J'ai créé un rotateur jQuery personnalisé en utilisant juste une animation de base pour faire tourner les 3 Divs (images). J'ai construit la fonction et ensuite réinitialiser la fonction en l'utilisant comme un rappel. Voici le code:Le rotateur jQuery ne tourne pas correctement - trop de récursivité

 
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()); 
}; 

Il convient de noter que lorsque vous appelez à nouveau la fonction que j'ai essayé de faire une autre fonction aussi appelée ImageRotate2(); et il a fait la même chose. Il boucle, mais je reçois toutes sortes de funkiness. Edit: J'ai également essayé quelques réponses dans les réponses et elles me laissent toutes les deux avec des erreurs de récursion chaque seconde.

Répondre

1

Soit passer dans la fonction (lorsque vous mettez entre parenthèses après, il est en fait appeler ici et maintenant et ne passant pas une référence à elle) OU imbriquer dans une définition de fonction, comme ceci:

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

EDIT:

plutôt que d'appeler la fonction, essayez faire la queue vers le haut avec setTimeout:

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

maintenant il lance cette erreur dans firebug "manquant (avant les paramètres formels [pause sur cette erreur] $ (CurrentFeature2) .stop (faux, vrai) .... px '}, 25, function {ImageRotate2()}); \ n " –

+0

mon mauvais, needs() juste après la fonction et avant l'ouverture { –

+0

bien, il se débarrasse de l'erreur j'ai commenté mais maintenant il jette des erreurs de récursivité chaque seconde –

1

Modifier cette ligne:

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

être

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

Vous devez passer la poignée à une fonction, et non le résultat de l'appel de la fonction. =)

+0

Malheureusement, cela n'a pas fait l'affaire. Il a continué à me donner des erreurs de récursion chaque seconde: [ –

0

Je ne comprends pas pourquoi il ne serait pas vous donner récursion err ors. Il ne semble y avoir aucune instance où il arrête de s'appeler lui-même, à moins que le code me fasse juste saigner les yeux.

Si vous ne disposez pas d'un moyen pour que le code cesse de se propager, il renverra une erreur.

Questions connexes