2012-08-13 5 views
6

Ho un elenco di post sul blog e il numero sta raggiungendo 25+ ma è tutto in una pagina, quindi ho bisogno di provare a costruire un caricatore pigro.Lazy load post sul blog

ho provato vari plugin ma nessuno è lavorare

http://jsfiddle.net/tara_irvine/S9GGz/6/

http://jsfiddle.net/tara_irvine/S9GGz/9/

http://jsfiddle.net/tara_irvine/S9GGz/13/

C'è un modo per controllare il valore superiore di un div e se è in vista, allora viene aggiunta una classe in modo che div divenga visibile (la pagina carica il div nascosto)

Ho guardato questi post ma dopo aver provato varie soluzioni nessuno ha funzionato per me.

How to check if an element is in the view of the user with jquery Position of Div in relation to the Top of the Viewport

Se qualcuno può far luce su questo sarei molto grato. Non so dove sto andando male.

Grazie molto

+0

Credo che questo articolo descrive quello che stai cercando: http://stackoverflow.com/questions/8192651/load-lazy-loading-a-div-whenever-the-div-gets-visible -per-la-prima- – Mossawi

+0

Hai guardato http://www.infinite-scroll.com/ – Cyclonecode

+0

hai guardato la mia risposta qui sotto? come funziona? – AddiktedDesign

risposta

7

jQuery Waypoints è un bel plugin per reagire su elementi che entrano in vista; hanno anche a lazy-loading example.

+0

Scusa, non intendo essere un dolore ma è un carico pigro? Non voglio uno scroll infinito solo per il div a fadeIn quando è in vista. Grazie per la pronta risposta. –

+0

Ben carico lento significa che non si carica il contenuto finché l'utente non raggiunge lì; sembri avere una sorta di "display pigro" in mente. L'idea è la stessa, puoi usare Waypoint e usare '$ x.show()' invece di '$ x.load()'. (Personalmente, preferisco usare una sorta di cercapersone, che sembra più facile da comprendere per l'utente.) – Tgr

+0

Grazie mille abbiamo usato questo e funziona bene –

1

http://archive.plugins.jquery.com/project/lazyload è una lista di pliugins lazy loading ma è più per le immagini caricamento.

quello che si può provare è avere ogni elemento blogpost nascosto tranne che per i primi tre, poi su

+0

Mi dispiace dover essere in grado di caricare i div pigici in base alla loro posizione y, almeno penso che sia la soluzione. Sai se Lazy Load può caricare più di semplici immagini? –

2

Io non so come la configurazione è, ma vi suggerirei di usare jQuery per scoprire la distanza dalla parte superiore della pagina di questo sarebbe:

var scrollTop  = $(window).scrollTop(), 
    elementOffset = $('#my-element').offset().top, 
    distance  = (elementOffset - scrollTop); 

come da questo post di stack overflow: Determine distance from the top of a div to top of window with javascript

applica questo al tuo 25 ° post mettendo id o nomi numerati su ciascuno (suppongo che la pagina sia generata in PHP).

quindi utilizzare ajax per caricare più post del blog quando la distanza raggiunge una certa quantità.

EDIT: è possibile utilizzare jQuery maggiore di nascondere loro:

$(".element-class:gt(24)").css("display","none");​ 

documentazione qui: http://api.jquery.com/gt-selector/

poi solo se si scorre oltre un certo scroll-top, si può solo impostare

$("visible-element").css("display","block") 

EDIT 2: PROVATE QUESTO FIDDLE - http://jsfiddle.net/addiktedDesign/KjNnY/

1

Ho provato a ottenere la parte superiore di un elemento e a visualizzare il contenuto quando è nella finestra, il contenuto potrebbe essere nascosto o caricato da una chiamata Ajax. Prova questo codice.Puoi sperimentare con la variabile di sensibilità per vedere cosa funziona meglio per te:

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
    <script type="text/javascript"> 
     var processScroll = true; 
     var sensitivity = 10; 
     function handleScroll() 
     { 
      if (processScroll) { 
       processScroll = false; 
       topHidden = $('.block_hidden:first').offset().top; 
       if(($(window).scrollTop() + $(window).height()) > (topHidden + sensitivity)) 
       { 
        console.log('show now'); 
        $('.block_hidden:first').removeClass('block_hidden').addClass('block'); 
       } 
      } 

      processScroll = true; 
     } 

     $(document).ready(function() 
     { 
      $(window).scroll(handleScroll); 
     }); 
    </script> 

    <style> 
     .block_hidden{ 
      width:300px; 
      background: green; 
      margin:5px; 
      visibility: hidden; 
      height: 10px !important; 
     } 

     .block{ 
      height: 200px; 
      width:300px; 
      background: green; 
      margin:5px; 
     } 
    </style> 

</head> 
<body> 
    <div class="block"></div> 
    <div class="block"></div> 
    <div class="block"></div> 
    <div class="block_hidden"></div> 
    <div class="block_hidden"></div> 
    <div class="block_hidden"></div> 
    <div class="block_hidden"></div> 
    <div class="block_hidden"></div> 
    <div class="block_hidden"></div> 
</body> 
</html> 
1

Stai chiedendo informazioni su Caricamento pigro.

Bene, la risposta deve includere un lato server. La tua domanda non specifica quale tipo di lingua lato server stai usando. Nella mia risposta userò un codice PHP di base per deridere post di blog casuali.

caricamento lento significa che viene caricato solo ciò che l'utente può vedere e in seguito caricare più dati quando necessario.

caricamento dati significa - richiedendolo da un server. Questo di solito riguarda lo AJAX ma non necessariamente. (anche se probabilmente puoi usare AJAX). JQuery ha un meraviglioso ajax interface.

La domanda più grande è - cosa dovrebbe attivare il mio prossimo carico - quindi tutti i plugin.

Ho preso il consiglio di Tgr e implementato un carico pigro con i waypoint. Ho anche usato waypoint tutorial for lazy loading come suggerito da Tgr (dai a Tgr altri punti per favore).

Potete vedere il mio attuazione a my site

Quello che ho fatto è stato post del blog finte con la modifica del titolo. Ogni volta che l'utente scorre abbastanza, ricevo più messaggi dal server.

Ho aggiunto un collegamento per il download per la mia fonte in modo da poter scaricare e iniziare a giocare con esso. basta eseguire main.html e sei a posto.

Il file more_posts.php genera un post lorem ipsum con un titolo casuale. (Avevo bisogno di alcuni contenuti falsi per avere una pergamena sulla pagina).

Sembra che questo

<h1> This is post number <?php echo uniqid("",true)?> </h1> 

<div style="color:red"> 
Lorem ipsum dolor .... Quisque ut pretium nibh. 
</div> 

<div style="color:blue"> 
Lorem ipsum dolor .... Quisque ut pretium nibh. 
</div> 

Come si può vedere l'unico codice PHP che ho è quello di aggiungere qualcosa di casuale al titolo.

Questo dovrebbe sembrarti familiare visto che hai già 25 post nel tuo blog.

La vera logica sta nel main.html - la parte HTML assomiglia in modo

<section id="container"> 

    </section> 

    <footer> 
     <nav> 
      <ul> 
       <!-- Hijack this link for the infinite scroll --> 
       <li class="more"><a href="more_posts.php" title="Traditional navigation link">Next Page</a></li> 
      </ul> 
     </nav> 
    </footer> 

L'idea è di avere section che contiene i primi posti - e ti dà un po 'di scorrimento nella pagina. In basso si ha un collegamento more all'interno di un footer, che quando JavaScript è disabilitato dovrebbe funzionare come un normale collegamento "successivo".

Waypoint utilizza questo collegamento per attivare il carico successivo. Ogni volta che il link sta per essere mostrato sullo schermo, useremo ajax per ottenere automaticamente il prossimo post.

Così la parte JavaScript assomiglia così:

$(document).ready(function() { 

    function loadMorePosts(callback){ 
     $.get($('.more a').attr('href'), function(data) { 
       $('#container').append($(data)); 
       if (typeof(callback) == "function"){ callback(); } 
     }) 
    } 
    loadMorePosts(); 

    var $footer = $('footer'); 
    var opts = { 
     offset: '100%' 
    }; 

    $footer.waypoint(function(event, direction) { 
         $footer.waypoint('remove'); 
         loadMorePosts(function(){ $footer.waypoint(opts);}); 


      }, opts); 
}); 

la funzione loadMorePosts invoca il metodo $.get che è una sintassi più semplice per $.ajax({type:'GET' .. }). Utilizza lo stesso URL di cui ha l'attributo href del collegamento. Nel mio esempio l'attributo href punta a "more_posts.php".

Quando la mia demo viene caricata, il contenuto è completamente vuoto, quindi vado avanti e prelevo il primo post che voglio mostrare. Poi dico al waypoint di ascoltare sul footer - e ogni volta che il footer è vicino, vado a prendere più post.

C'è una parte difficile in cui faccio $footer.waypoint('remove') e passare un callback a loadMorePosts che lega nuovamente il waypoint al piè di pagina. Questo è solo un cavillo - waypoint è necessario rimuovere il grilletto mentre si recupera più HTML, altri la pagina potrebbe agire divertente ..

Questo è più o meno quello ..

Ho provato a fare questo come semplice possibile, ma è un grosso problema da trattare in una sola risposta. Quindi fammi sapere se posso fare di più per chiarire le cose.

+0

Spiacente, non ho accesso agli script del server ma la soluzione del waypoint è quello con cui siamo andati e funziona bene. Grazie mille per tutte le risposte. –