2009-12-27 3 views
0
scroller1 scroller2 
----------- ----------- 
|this is o| |this is a| 
|ne elemen| |nother el| 
|t, four l| |3 lines | 
|ines  | |   | 
----------- ----------- 

Ceci est un exemple simple de configuration. J'ai mis en place un système qui défilera jusqu'au nième élément de chaque scroller, mais aussi en utilisant des fractions de sorte que si scroller1 est à l'élément 4 et à mi-chemin à cinq, il fera la même chose pour scroller2. Mais quand j'appelle la fonction 'onscroll', elle place l'autre scroller aux bonnes positions, puis appelle 'onscroll' parce que son scrollTop est en train de défiler. Cela se répète à son tour jusqu'à ce que Javascript lève l'erreur Max Stack Call, ou les deux dérouleurs atteignent le bas.Empêcher les erreurs Max Stack Call pour le défilement div

Comment cela peut-il être évité?

Répondre

2

Créer une variable globale, currentlyHandlingScrollEvent et votre onscroll Code mettent des conditions sur cette base:

var currentlyHandlingScrollEvent = false; 
function handleScroll (e) { 
    if (!currentlyHandlingScrollEvent) { 
    currentlyHandlingScrollEvent = true; 
    // do stuff ... 
    currentlyHandlingScrollEvent = false; 
    } 
} 

scroller1.onscroll = handleScroll; 
scroller2.onscroll = handleScroll; 
+0

fonctionne très bien, merci! Il m'a fallu un moment pour comprendre comment changer cette variable lorsque le défilement s'est arrêté, mais cela fonctionne parfaitement maintenant. – Tom

+0

Oups. Edited ma réponse pour réinitialiser la variable à sa valeur initiale. Désolé pour l'erreur. –

+0

En fait, s'avère que cela ne fonctionne que dans Safari. D'autres navigateurs y compris Firefox revenir à l'ancien comportement ... et cela me tue. Check it out @ http://www.tombarrasso.com/search/ – Tom

Questions connexes