2011-09-19 15 views
13

Sembra che quando provo a caricare la pagina, tutte le immagini sono impilate l'una sull'altra. Ma se dovessi fare clic su un collegamento che ti porta alla stessa pagina (come il link di casa), allora la muratura entra in gioco. Quindi penso che la muratura si stia caricando troppo presto, come prima che jquery prenda visione della pagina o qualcosa del genere.interruzioni in muratura jquery (pile immagini) in chrome/safari ma solo al primo caricamento

Ecco la mia chiamata jQuery:

$(document).ready(function(){ 
    $('#image_roll_container').masonry({ 
     itemSelector: '.box' 
    }); 

.... 

Ecco la pagina in questione:

http://ratattoos.com/

funziona bene in Firefox e IE8.

+1

Si prega di aggiungere uno screenshot - il tuo link è rotto. – opyate

risposta

11

sembra che ho bisogno di un plugin chiamato imagesLoaded in modo che lo script Monsry per funzionare correttamente con artisti del calibro di Chrome e Safari

+0

Come si usa? o inizializzarlo con la massoneria? –

+0

$ ('# masonry'). ImagesLoaded (function() { // le immagini sono state caricate ed è possibile inizializzare la muratura }); –

18

sono riuscito a risolvere questo problema con il seguente Tweak:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('img').load(function(){ 
      $(".content_photo").masonry(); 
     }); 
     $(".content_photo").masonry(); 
    }); 
</script> 
4

Sei corretto sulle immagini caricate. Stava funzionando bene in Firefox ma impilando in Chrome/Safari.

Ecco il link http://masonry.desandro.com/demos/images.html

Codice:

var $container = $('#container'); 

$container.imagesLoaded(function(){ 
    $container.masonry({ 
    itemSelector : '.box' 
    }); 
}); 
1

Recentemente ho sono imbattuto in questo problema. Per risolvere il problema, ho utilizzato gli attributi di larghezza e altezza. Il problema si è risolto da solo.

0

Un altro modo, se si conoscono le altezze dell'immagine, è assegnarle nel CSS prima di caricare la Massoneria, quindi il layout è più veloce dell'attesa per le immagini. Questo metodo funziona se, ad esempio, tutte le tue immagini hanno la stessa dimensione. Quindi il tuo sito continuerà a caricarsi rapidamente con connessioni lente, come i dispositivi mobili.

ho postato un po 'di scrittura per il metodo alternativo qui:
http://instancia.net/loading-jquery-masonry-on-mobile/

Se si utilizza questo script, modificare i numeri per abbinare il vostro.

0

Su Firefox e sul mio iPad 2 la muratura funzionava bene ma in chrome e safari su OS X gli elementi si sovrapponevano/impilavano sul caricamento della pagina e fino a quando non si verificava una ridimensionamento della finestra. Dopo aver scavato nel codice di jquery.masonry.js ho scoperto che posso attivare un ridimensionamento() subito dopo aver creato la muratura in modo che tutti gli elementi si riorganizzino correttamente. Ora tutto funziona bene.

jQuery(document).ready(function(){ 
var $container = $('#container'); 
$container.imagesLoaded(function(){ 
    $container.masonry({ 
    itemsSelector: '.thumbnail', 
    isFitWidth: true 
    }).resize(); 
}); 
}) 

tutte le altre soluzioni: .load (finestra), impostando la larghezza & altezza in CSS e su attributi img, etc, semplicemente non ha funzionato per me.

0

E ' ha bisogno di altezze in questi browser per visualizzare correttamente come ha detto Jennifer. Uso la funzione getimagesize() di php per ottenere l'altezza e la larghezza delle immagini. Funziona perfettamente ora.

0
<script> 
     var container = document.querySelector('#masonry'); 
     var msnry = new Masonry(container, { 
      itemSelector: '.item', 
      "columnWidth": 200, 
     }); 
     $('.item img').load(function(){ 
       var msnry = new Masonry(container, { 
       itemSelector: '.item', 
       "columnWidth": 200, 
      }); 
     }) 
</script> 
+0

Si prega di utilizzare solo la lingua inglese. – wonko79

0

se l'uso $ ('img') di carico (function() F5 (refesh) => errore

Nuovi metodi:.

$(window).on('load resize', function() { 
 
    if ($('.masonry-wrap').length) { 
 
    $('.masonry-wrap') 
 
    .css('max-width', $(window).width()); 
 
    } 
 
}); 
 
$(window).on('load', function() { 
 
    if ($('.masonry-wrap').length) { 
 
    setTimeout(function() { 
 
     $('.masonry').masonry({ 
 
     columnWidth: 0, 
 
     itemSelector: '.grid-item' 
 
     }); 
 
    }, 1); 
 
    } 
 
});
<div class="masonry-wrap"> 
 
    <div class="masonry"> 
 
    <div class="grid-item">...</div> 
 
    <div class="grid-item">...</div> 
 
    .... 
 
    </div> 
 
</div>

0

Il " caricamento "si attiverà per ogni immagine nel DOM, questo è eccessivo. È necessario aggiornare il layout della muratura quando viene caricata l'ultima immagine nel DOM. Ecco il codice:

0

Ho avuto il problema inverso come descritto: il primo caricamento funzionava bene in Mac OS X Safari, ma cambiare la griglia con tutti i nuovi elementi li ha fatti impilare tutti nell'angolo in alto a sinistra. Inoltre, l'attesa per l'evento pronto e l'impostazione dell'altezza CSS & sui nostri elementi non l'hanno risolto.

Sul nostro sito, abbiamo categorie di dati che vengono visualizzati nella griglia della muratura e solo una categoria mostra alla volta. Un utente può cambiare la categoria in qualsiasi momento e attivare una richiesta AJAX per caricare i nuovi dati. In ultima Safari (9.1, 10) e browser come Chrome, si potrebbe semplicemente fare questo quando si cambia la categoria di scambiare in tutti i nuovi elementi:

// domData is HTML string from the server 
    // IMJS is our global variable that we use for globals and lookups 
    $("#divTemplateCategoryName").after(domData); // insert new HTML 
    var elementsToAdd = $(".grid-item-template-info"); //select the elements 
    IMJS.MasonryGrid.masonry('addItems', elementsToAdd); // tell masonry to add them 
    IMJS.MasonryGrid.masonry('layout'); // tell masonry to layout again 

Tuttavia, in alcune versioni di Safari, che non avrebbe funzionato, e abbiamo dovuto fare questo, invece:

// domData is HTML string from the server 
    // IMJS is our global variable that we use for globals and lookups 
    IMJS.MasonryGrid.masonry('destroy'); // destroy the grid 
    $("#divTemplateCategoryName").after(domData); // insert new HTML 
    InitMasonry(); // re-do our entire masonry init 

Perché io non ho il tempo per rintracciare tutte le versioni del browser che potrebbero essere interessati da questo bug, sono passato a quest'ultimo metodo per tutti i browser.

Problemi correlati