2015-08-12 7 views
5

Ich habe ein Problem mit dem Auslösen von Lazy Loading auf Scroll mit PhantomJS. Keine der vorherigen Antworten (selbst angenommene) hat für mich funktioniert. Die meisten waren für alte PhantomJS-Versionen.Wie scrollt man in PhantomJS, um Lazy Loads auszulösen?

Andere Fragen - fast gleich oder ähnlich wie ich ohne oder mit Antworten, die nicht berufstätig sind:

Alle von ihnen versucht window.document.body.scrollTop = document.body.scrollHeight zu nutzen mit page.evaluate() oder auch wenn sie versuchen, richtige page.scrollPosition dann aus irgendeinem Grund zu verwenden Sie verwenden einige explizite, fest codierte Scroll-Werte oder begrenzen ihre Scrolls für einige Elemente, die auf der Seite sein sollten, wenn Scroll verfügbar ist.

+0

Selbst wenn Sie selbst antworten, sollten Fragen immer noch gute Fragen sein. Beschreiben Sie, was genau das Problem ist, und verknüpfen Sie mit vorherigen Fragen, die nicht funktionierten. –

+0

Natürlich, danke, dass du darauf hingewiesen hast - ich denke, ich habe es gerade getan. – Seti

Antwort

6

PS: vor dem Rendern der Seite - bitte verwenden Sie page.scrollPosition = { top: 0, lefT: 0}; oder Sie werden nur unten auf der Seite angezeigt sehen.

var vWidth = 1080; 
var vHeight = 1920; 
page.viewportSize = { 
    width: vWidth , 
    height: vHeight 
}; 

//Scroll throu! 
var s = 0; 
var sBase = page.evaluate(function() { return document.body.scrollHeight; }); 
page.scrollPosition = { 
    top: sBase, 
    left: 0 
}; 

function sc() { 
    var sBase2 = page.evaluate(function() { return document.body.scrollHeight; }); 
    if (sBase2 != sBase) { 
     sBase = sBase2; 
    } 
    if (s> sBase) { 
     page.viewportSize = {width: vWidth, height: vHeight}; 
     return; 
    } 
    page.scrollPosition = { 
     top: s, 
     left: 0 
    }; 
    page.viewportSize = {width: vWidth, height: s}; 
    s += Math.min(sBase/20,400); 
    setTimeout(sc, 110); 
} 
sc(); 
  • Zuerst setzen wir s und SBASE (aktuelle Scroll-Offset und maximale Scroll-Offset).
  • Dann scrollen wir Seite mit Phantom bis zum Ende.

  • Wir definieren Scroll-Funktion - das wird von 0 nach unten (sBase) in Schritten von pageHeight/20 oder 400 (die in Wert niedriger) alle 110 ms scrollen. ** Diese Funktion kann auch unendlich Scroll verarbeiten - wenn ein wenig optimiert. Aber ich gebe Ihnen die grundlegende Verwendung, die aufhören sollte, wenn Seite zu langsam lädt; P

  • Wir ändern auch Ansichtsfenster - als einige Lazyload-Skript noch nicht mit blankem Scrollen ausgelöst wurden.
+1

Sie könnten Ihre Variablen 's' und' sBase' in etwas beschreibenderes umbenennen, da sie relativ kurz sind und nicht viele Informationen enthalten. –

+1

Versucht dies (auf Twitter) und habe zwei Probleme: 1) neue Elemente scheinen nicht zu laden, nicht sicher, ob Phantomjs Ajax-Aufrufe deaktiviert? 2) Seite scheint bei jeder Iteration zu zoomen, weil die Höhe reduziert ist, bis das Ansichtsfenster nur etwas 116px groß ist, ich denke, das hat mit Problem 1 zu tun. Weißt du, warum neue Elemente nicht geladen werden? – PGT

Verwandte Themen