Due cose da tenere a mente prima di esporre il mio problema: 1. Non sono un programmatore, quindi non ho IDEA di quello che sto facendo 2. Parlami come me Sono stupido e molto paziente (vedi 1.)Isotope + Lazyload: dimensione immagine
Va bene, ci sono circa un milione di cose sbagliate nel modo in cui il sito è impostato, ma in questo momento sto solo cercando di far funzionare Isotope con Lazyload . Probabilmente ho letto ogni singolo stackoverflow sul problema, ma finora non sono stato in grado di risolvere il mio problema. Sto usando Stacey come CMS. Fondamentalmente, quello che sto cercando di ottenere è simile a xxx.aestheticallyloyal.com (o, in realtà, www.imageworkshop.com/lazyload-portfolio), ma con miniature cliccabili disposte in stile Isotopo/Massoneria che si aprono nelle rispettive pagine del progetto. Ho provato a far funzionare Infinitescroll ma non sono pienamente sicuro che la paginazione sia supportata in Stacey, quindi ho rinunciato a questo. Inserisci Lazyload.
Ho ottenuto Isotope per funzionare correttamente. Posso far funzionare Lazyload, separatamente. Ma ogni volta che provo a mescolare i due, fallisco miseramente. Il problema è che le immagini sono organizzate da Isotope prima che siano completamente caricate, quindi non vengono allineate in base alla loro dimensione reale (che è variabile) ma ottengono una larghezza e un'altezza fisse (sto bene con larghezza fissa, questo è il punto, ma l'altezza dovrebbe ridimensionarsi di conseguenza). Se ridimensiono la finestra dopo, tuttavia, la griglia viene regolata di conseguenza, come dovrebbe.
Questo è il codice con cui sto lavorando:
<script>
$(function() {
var $window = $(window);
var $container = $('#container');
var $imgs = $("img.lazy");
$imgs.lazyload({
event: 'scroll',
effect: 'fadeIn',
failure_limit: Math.max($imgs.length - 1, 0),
appear: function() {}
});
$(function() {
$container.imagesLoaded(function() {
$container.isotope({
onLayout: function() {
$window.trigger("scroll");
},
itemSelector: '.photo'
});
});
});
$window.load(function() {
$container.isotope('reLayout');
});
});
</script>
E 'probabilmente sbagliato in tanti modi ... non lo so. Inoltre, penso che reLayout stia facendo assolutamente nulla, e da lì non so davvero dove andare comunque. Qualcuno può dare un'occhiata al mio sito flow.blukaet.com e fammi sapere come ordinare questo casino? (Non importa il menu a sinistra, non ho nemmeno iniziato a guardarlo). Grazie.
UPDATE # 1
Ho cercato di utilizzare uno script LazyLoad diverso chiamato Fasterize. Le cose sembrano andare solo marginalmente meglio, ma ho ancora problemi a visualizzare le immagini che appaiono sotto la piega in modo corretto. Fondamentalmente tutto ciò che carica nel viewport viene risolto correttamente da Isotope, ma le immagini rimanenti non vengono aggiunte in base alla loro dimensione effettiva, finale e visibile. Avrei bisogno di attivare qualcosa in Isotope per renderlo riorganizzare i nuovi elementi dopo che sono stati caricati. Non so se è possibile a tutti. Qualcuno può aiutare? Ecco il sito dove puoi vedere cosa sta succedendo: flow.blukaet.com (Il codice sopra non è più attuale).
UPDATE # 2
Quindi questo è il codice grazie modificato alla risposta fornita di seguito (anche, questo sta usando fasterize/lazyload in contrapposizione lazyload di per appelsiini):
<script>
$(window).load(function() {
var $container = $('#container');
var $imgs = $("img");
$container.imagesLoaded(function() {
$container.isotope({
itemSelector: '.photo'
});
});
$(window).scroll(function() {
$container.isotope('reLayout');
});
});
</script>
Non è super liscio, ma ha fatto il lavoro.
precedenza ho provato qualcosa sulla falsariga di:
<script>
$(function() {
var $container = $('#container');
var $imgs = $("img");
$container.imagesLoaded(function() {
$container.isotope({
itemSelector: '.photo'
});
});
$imgs.load(function() {
$container.isotope('reLayout');
});
});
</script>
che in realtà correva molto più agevole, ma in qualche modo stava dando il seguente errore console:
cannot call methods on isotope prior to initialization; attempted to call method 'reLayout'
Quindi non so.
Un'altra cosa da notare è che il codice funziona in FF e Opera. Apparentemente Safari ignora del tutto il carico. Non ho provato su Chrome e IE. Se qualcuno vuole controllare: flow.blukaet.com
di spingere forse le cose nella giusta direzione, questo argomento viene illustrato più o meno una cosa simile http://stackoverflow.com/questions/12451641/how-to-change-the-css-after-image-lazy-loading-jquery male non riesco a capire come fare questo lavoro. qualcuno può aiutare? – hoovercorr
ancora ragionando su questo ... il problema, penso, è che l'isotopo ha bisogno di un'altezza specificata, il che non accade finché l'immagine reale (chiamata in data-original, non in src) viene caricata da Lazyload. Penso che sarebbe ok se Isotope ricaricato/riorganizzato stesso dopo che le immagini diventano visibili, ma non so come farlo farlo. – hoovercorr