2016-09-30 6 views
1

Ich möchte Seite zu einem genauen Element nach dem Klicken auf einen Link zu scrollen. Aber nach dem Klicken scrollt es zum Ende einer Seite und wenn ich versuche hoch zu scrollen, versucht es nach unten zu scrollen.JavaScript clearInterval funktioniert nicht

Also, es bedeutet, dass clearInterval() in meiner Funktion nicht funktioniert und ich verstehe nicht. "Warum ?" Hier

ist die Funktion:

function smoothScr() { 
 
    \t var elem = document.getElementById("main"); 
 
    \t var elemPos = elem.getBoundingClientRect().top; 
 
    \t var i = 0; 
 
    \t var changePos = setInterval(changingPos, 10); \t 
 

 
    \t function changingPos() { 
 
    \t \t if (elemPos == 0) { \t \t \t \t \t 
 
    \t \t clearInterval(changePos); 
 
    \t \t } else { \t 
 
    \t \t \t i++; 
 
    \t \t \t window.scrollBy(0, i); 
 
    \t \t }; 
 
    \t } 
 
    }

+1

Warum nicht Anker verwenden? –

+6

'elemPos' wird nur einmal definiert, wenn Sie' smoothScr' aufrufen. Es wird nicht automatisch aktualisiert. Sie müssen den Wert in 'changingPos' ändern. – Teemu

+0

'window.scrollBy' in Ihrem Fall sollte durch 1ps, 2px, 3px und so weiter scrollen. versuche, es in 'window.scrollBy (0, 1)' zu ändern, wird das funktionieren? – serge1peshcoff

Antwort

0

Statt

if (elemPos == 0) 

werden Sie

if (elem.getBoundingClientRect().top == 0) 

In den Sie verwenden müssen Zum Beispiel ändert sich elemPos niemals von seinem Anfangswert.

+0

gut, es hilft nicht: | –

+0

Machen Sie eine console.log (elem.getBoundingClientRect(). Top), um zu sehen, warum es nicht gleich 0 ist. Überprüfen Sie den Wert in der Konsole, um zu sehen, was das Problem ist. –

Verwandte Themen