2015-08-12 10 views
5

Ho un problema con l'attivazione del caricamento lazy su scroll con PhantomJS. Nessuna delle risposte precedenti (anche accettate) ha funzionato per me. La maggior parte erano per le vecchie versioni di PhantomJS.Come scorrere in PhantomJS per attivare i carichi pigri?

Altre domande - quasi uguali o simili alla mia, senza o con risposte che non funzionano:

Tutti di loro cerca di utilizzare window.document.body.scrollTop = document.body.scrollHeight con page.evaluate() o anche se provano a utilizzare il corretto page.scrollPosition quindi per qualche rea loro usano alcuni valori di scorrimento hard disk raccolti esplicitamente o limitano i loro scroll per alcuni elementi che dovrebbero essere sulla pagina quando lo scroll è disponibile.

+0

Anche se si auto-risponda, le domande dovrebbero essere ancora buone domande. Descrivi qual è esattamente il problema e collega a domande precedenti che non hanno funzionato. –

+0

Ovviamente, grazie per averlo indicato - penso di averlo fatto proprio adesso. – Seti

risposta

6

PS: prima di eseguire il rendering della pagina, utilizzare page.scrollPosition = { top: 0, lefT: 0}; o si vedrà solo il fondo della pagina visualizzata.

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(); 
  • In primo luogo abbiamo impostato s e sBase (offset di scorrimento corrente e massima di scorrimento di offset).
  • Quindi si scorre la pagina con il fantoccio fino alla fine.

  • Definiamo la funzione di scorrimento - che scorrerà da 0 a fondo (sBase) in incrementi di pageHeight/20 o 400 (che è inferiore in valore) ogni 110 ms. ** Questa funzione può anche gestire lo scroll infinito - se ottimizzato un po '. Ma ti do l'uso di base che dovrebbe fermarsi se la pagina viene caricata troppo lentamente P

  • Cambiamo anche la vista -come alcuni script lazyload non sono ancora stati attivati ​​con lo scrolling nudo.
+1

Si potrebbe voler rinominare la variabile 's' e' sBase' in qualcosa di più descrittivo, perché sono relativamente brevi e non portano molte informazioni da soli. –

+1

Ho provato questo (su twitter) e ho due problemi: 1) non sembrano essere caricati nuovi elementi, non sono sicuro che phantomjs disabiliti le chiamate ajax? 2) la pagina sembra ingrandire ogni iterazione perché l'altezza è ridotta, fino a quando il viewport è alto qualcosa come 116px, penso che questo abbia a che fare con il problema 1). Sai perché i nuovi elementi non vengono caricati? – PGT

Problemi correlati