8 Stimmen

Ist es möglich, ein "Infinite Scroll"-Javascript zu schreiben, das mit der Zurück-Taste umgehen kann?

Gehen Sie hier: http://www.infinite-scroll.com/ Spielen Sie mit dem unendlichen Bildlauf. Beachten Sie, dass Sie nicht auf einen Link klicken und dann "zurück" drücken können. Es gibt Störungen, wenn Sie das tun.

Ich habe also vor, meine eigene unendliche Schriftrolle zu schreiben.

  • Wenn der Benutzer an das Ende gelangt, laden Sie einen AJAX-Aufruf. Dann tun Sie eine JQuery "anhängen" das Ergebnis auf die div. Rufen Sie dann meine anderen Funktionen für diese Elemente auf. (Ich setze die Hintergrundbilder all dieser Elemente in Javascript).

Wird das funktionieren? Wenn ich das tue ... werde ich in der Lage sein, die Zurück-Taste zu bedienen?

4voto

Jonathon Bolster Punkte 15681

Bei einem Projekt, an dem ich gearbeitet habe, habe ich genau das Gleiche überlegt. Eine Option, über die ich nachgedacht habe, war, dass die Schaltfläche "Zurück" zu der Stelle zurückkehren kann, an der der Link angeklickt wurde (wie beim normalen Browsen).

Zunächst müssen Sie aufzeichnen, auf welcher Seite des unendlichen Bildlaufs Sie sich befinden, damit Sie diesen Abschnitt erneut aufrufen können. Dies können Sie durch geschicktes Herumspielen mit der window.location.hash Wert. Wenn Sie sich meine Antwort auf diese Frage Ich erkläre ausführlicher, wie man das in einfachem JavaScript oder jQuery macht, indem man Asuals Adress-Plugin .

Der grundlegende Teil davon sieht folgendermaßen aus:

// Whatever you're using to load the next page
function scrollToNextPage(page){
   // Your infinite scrolling stuff
   $.address.parameter("currentPage", page);
}

$.address.externalChange(function(){
   var page = $.address.parameter("currentPage"),
       top = $.address.parameter("linkTop");

   loadAjaxUpTo(page);   
   $('html, body').animate({ scrollTop: top }, 500);
});

// Set a parameter for the location of a clicked link
$("a").live('click', function(){
   $.address.parameter("linkTop", $(this).scrollTop());
});

Den letzten Teil (die Position des angeklickten Links) habe ich nicht implementiert, aber ich wüsste nicht, warum es nicht funktionieren sollte. Es würde dazu führen, dass das Fenster schön an die Stelle gescrollt wird, an der Sie sich befinden. Sie können es immer mit einem Anker auf die geladene Seite statt (aber wenn Sie zu ihm scrollen, wird es immer an den Anfang der Seite gehen).

Allerdings gibt es ein paar Punkte, Ich würde das nicht empfehlen . Zumindest für das Projekt, an dem ich arbeitete, war das nicht wirklich notwendig. In meinem Projekt erwarteten wir, dass der Benutzer zurückgehen würde, um seine Optionen zu ändern, und dachten, dass das Scrollen kein Problem sein würde (obwohl wir nicht so viele Seiten zum Scrollen hatten). AJAX (und Ihr JavaScript zum Einstellen der Bilder) muss geladen und erneut ausgeführt werden, was viel Zeit in Anspruch nimmt, je nachdem, wie viele Seiten Sie neu laden müssen. Zusätzlich zu der Zeit, die für das Blättern zum Link benötigt wird (Sie könnten einfach window.scrollTo aber es gibt keine Animationen, also ist alles sehr ruckelig. Sie könnten immer nur die Seite laden, auf der sich die Person gerade befindet, und die vorherigen Seiten vergessen, aber auf diese Weise brechen Sie immer noch die Benutzererfahrung. Oder (was ich versucht habe) war, ein unendliches Scrollen in zwei Richtungen zu implementieren. Es würde also die Seite laden, von der aus der Benutzer geklickt hat, und prepend die vorherigen Seiten, wenn sie nach oben gescrollt wurden - das war allerdings zu viel Arbeit für das, was es war.

Ein weiterer Punkt ist, dass Sie, wenn Sie es trotzdem tun würden, eine GET Anfrage, um Ihre Seiten abzurufen (und stellen Sie sicher, dass der Cache nicht so eingestellt ist, dass er sofort abläuft). Ich habe festgestellt, dass Seiten, die per Ajax mit der GET-Anforderung angefordert werden, aus dem Cache geholt werden (zumindest bei einigen Browsern, die ich ausprobiert habe). Senden Sie Ihre Daten über eine POST wird der Cache immer ignoriert.

1voto

Nathan MacInnes Punkte 10845

Die einzige Möglichkeit, die Schaltfläche "Zurück" zu behandeln, besteht darin, den Speicherort-Hash (das Bit nach dem Symbol #) zu ändern. Das Drücken der Tasten "Zurück" und "Vor" kann auf zwei Arten gehandhabt werden:

  1. Haben Sie einen <a name="bookmark1"></a> die für jeden hinzugefügten Abschnitt eindeutig ist, und ändern Sie den location.hash entsprechend.
  2. Verwenden Sie eine setInterval mit einer kurzen Zeitspanne von z. B. 100 ms, um den location.hash auf Änderungen zu überwachen und den gewünschten Teil der Seite aufzurufen. Sie müssen dies tun, weil Sie nicht wirklich erkennen können, wenn die Schaltflächen "Zurück/Vorwärts" angeklickt werden.

Dies ist eine Implementierung der zweiten Methode, um Ihnen zu zeigen, wie sie funktioniert. Dabei enthält jede Ajax-Anfrage <a name="ajax-section-1"></a> y ajax-section-2 usw.

function addToBottom(htmlToAdd) {
    $('#main-div').append(htmlToAdd);
    window.location.hash = $('#main-div a[name^=ajax-section-]').last().attr('name');
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X