2009-08-07 6 views
1

J'ai une animation jQuery qui anime le 'scrollLeft' sur un conteneur pour produire une sorte d'effet de 'marquee'. Je l'ai mis en place donc sur le survol du conteneur il arrête l'animation, et à la sortie de la souris, il reprend.Pourquoi mon animation est-elle extrêmement lente à la reprise?

$(banksContainer).mouseover(function() { 
    $(banksContainer).stop(false); 
}); 

$(banksContainer).mouseleave(function() { 
    startAnimation(); 
}); 

Chaque fois que je déplace la souris sur l'animation puis de l'animation, il reprend à une vitesse lente extrêmement, mais choisit progressivement après une minute. Pourquoi cela se produit-il et peut-il être résolu?

PS. Voici la fonction DebuterAnimation comme demandé:

// recursive function - represents one cycle of the marquee 
function startAnimation() { 
    $(banksContainer).animate(
     { scrollLeft: scrollLeftEnd }, 
     35000, 
     "linear", 
     function() { 
      $(this)[0].scrollLeft = scrollLeftHome; 
      startAnimation(); 
     } 
    ); 
} 
+0

Pouvez-vous poster la fonction startAnimation? – cjacques

Répondre

2

C'est probablement parce que quand vous reprenez l'animation, la distance à parcourir est réduite mais le temps reste à 35 secondes. puisque la vitesse = distance/temps, ce serait lent.

Je pense que vous devriez régler le temps proportionnellement à la distance restante. Ce serait 35000 * distance restante/distance totale.

Quelque chose comme ça?

function startAnimation() { 
    $(banksContainer).animate(
     { scrollLeft: scrollLeftEnd }, 
     35000 * this.scrollLeft()/scrollLeftEnd, //or scrollLeftHome whichever is non-zero 
     "linear", 
     function() { 
      $(this)[0].scrollLeft = scrollLeftHome; 
      startAnimation(); 
     } 
    ); 
} 
+0

Solution brillante! Je me frappe la tête, parce que mathématiquement, ça aurait dû être évident. Merci pour votre aide. – Jonathan

+0

Merci! Je me cognais la tête aussi bien que c'était la première fois que je faisais une animation scrollLeft comme ça ... Ça devenait de plus en plus lent et je savais que ça avait quelque chose à voir avec la distance restante. Merci encore – StefanBob

Questions connexes