2016-08-02 6 views
0

Ich versuche eine Funktion in jQuery zu schreiben, dass wenn eine Schaltfläche geklickt wird, die Bildlaufposition des Benutzers gespeichert wird und wenn die Seite den Link lädt, auf den die Schaltfläche gerichtet ist, wird die Bildlaufposition abgerufen. Hier ist meine Funktion. Ich bin mir nicht sicher, was das Problem ist, da ich relativ neu dafür bin.Scroll-Position bei Klick speichern und dann abrufen?

var scrolltop; 

$(document).ready(function(){ 
$('a.page-numbers').click(function() { 
    scrolltop = $(document).scrollTop(); // store it 
    var href = $(this).attr('href'); 
    window.location= href; // I am doing this to force a button to go to a link and temporarily fix a pagination issue if people are curious. Not the current issue at hand. 
    return false; // Doing this so page doesn't scroll on click 
}); 
}); 

$(document).ready(function(){ 
$('html, body').animate({scrollTop: scrolltop}); //not scrolling to where saved 
}); 

Bonuspunkte für jeden, den es auch mobil (iOS, Android, etc.) machen kann kompatibel :)

+0

Variablen oder irgendein Javascript, einfach ** nicht ** persistent über Pageloads. Sie benötigen dafür dauerhaften Speicher. – adeneo

+0

Darf ich fragen, an welche Art von persistentem Speicher Sie denken? – LearntoExcel

+0

Nun, jeder persistente Speicher, der die Werte speichern kann, bis die nächste Seite geladen wird. Lokaler Speicher, Cookies, Verwenden der URL oder des Servers zum Speichern der Werte usw. – adeneo

Antwort

0

Wound up mit Session-Speicherung. Funktioniert aber ist nicht schön, da es oben beginnt, wenn die Seite geladen wird und springt sofort dorthin, wo Sie waren, bevor Sie auf den Link klicken.

$(document).ready(function(){ 
$('a.page-numbers').click(function(){ 
    sessionStorage["scrollPosition"] = $(window).scrollTop(); 
}); 
$(window).scrollTop(sessionStorage["scrollPosition"]); 
    sessionStorage.clear(); 
}); 
+0

Das scheint aber auch auf Mobilgeräten nicht zu funktionieren. – LearntoExcel

+0

Wenn jemand weiß, warum ich diese Antwort akzeptiere – LearntoExcel

1

ich das Problem glaube, dass Sie die Position in einer lokalen Variablen sind Speicher, die verschwinden wenn Sie die neue Seite laden.

Sie benötigen eine Möglichkeit, den oberen Bildlaufwert an die neue Seite zu übergeben. window.location = href + '#' + scrollTop; (Anmerkung:: - Ich schlage vor, den URL-Hash mit https://developer.mozilla.org/en-US/docs/Web/API/Window/location#Example_3

Also auf Klick sehen, ob alle Ihre Links bereits einen Hash haben, wie mein Link oben, werden Sie einen komplizierteren Ansatz tun müssen, für die Zusammenführung die scrollTop mit dem alten Hash, und sie am anderen Ende)

auf Last Aufteilung: var scrollTop = window.location.hash;

+0

Ich verwende diese Funktionen mit Paginierung, so dass sich der Hash ständig ändert. Wäre der obige Ansatz also weiterhin vorteilhaft? – LearntoExcel

+0

Sicher, siehe meine Notiz über Links, die bereits Hashes in ihnen haben - Sie müssen nur die Position zum Hash vor dem Laden der neuen Seite hinzufügen, und entfernen Sie die Position aus dem Hash nach dem Laden einer neuen Seite – alexanderbird

+0

Schätzen Sie die Hilfe, aber Wunde herauszufinden, wie Session-Speicher zu verwenden. – LearntoExcel

Verwandte Themen