2011-10-21 17 views

Respuesta

2

usted tiene que pasar el nuevo contenido con el método de la Masonería appended:

$("#container").append(content).masonry("appended", content); 

He actualizado su violín here.

+0

Gracias! No estoy seguro de por qué necesito decirle a Masonry que se ha agregado contenido. Puede obtenerlo del DOM simplemente recargando los ladrillos cuando se lo soliciten. –

+0

Bueno, supongo que al procesar solo los nuevos elementos se escalan mejor cuando tienes una gran cantidad de ladrillos. –

+0

Quizás. Depende de cuántos ladrillos. Tengo más de 150 ladrillos dinámicamente apilados sin retraso discernible. –

1

Me parece haber resuelto esto añadiendo una línea para recargar los "ladrillos" para la función _reLayout en el código jQuery albañilería en la línea 305.

_reLayout : function(callback) { 

    // This is my added line. 
    // Items might have been added to the DOM since we laid out last. 
    this.reloadItems(); 

    // reset columns 
    var i = this.cols; 
    this.colYs = []; 
    while (i--) { 
    this.colYs.push(this.offset.y); 
    } 
    // apply layout logic to all bricks 
    this.layout(this.$bricks, callback); 
}, 

// ====================== Convenience methods ====================== 

// goes through all children again and gets bricks in proper order 
reloadItems : function() { 
    this.$bricks = this._getBricks(this.element.children()); 
}, 


reload : function(callback) { 
    this.reloadItems(); 
    this._init(callback); 
}, 

Cualquier persona ve ningún problema con esto?

+1

Gracias Rico, su edición reloadItems() resolvió mi problema loco de Firefox. Mi contenido de albañilería se actualiza de forma constante y rápida con ladrillos anexos a través de ajax, además de quitar ladrillos. Solo en Firefox obtuve un posicionamiento incorrecto después de aproximadamente 3 actualizaciones de contenido, donde las primeras posiciones de la primera/fila superior estaban desactivadas, y quedarían incorrectamente posicionadas incluso al redimensionar o volver a llamar a la función .masonry().Al rastrear los valores que se pasan la función _placeBrick noté que estaba obteniendo los valores "setY" de -Infinity. De nuevo, no estoy seguro de por qué, pero esto eliminó el -Infinito va –

+0

¡Genial! Me alegro de que ayudó a alguien más. Tal vez pueda ver cómo obtenerlo como una opción en el código publicado. –

1

I hizo uso del método de reload:

.masonry('reload')

Aquí está la masonry doc for reload:

"Método de conveniencia para la activación de reloadItems entonces .masonry() Útil para anteponiendo o la inserción de artículos.. "

+0

El enlace está muerto. :( – Manwal

0

si está utilizando jQuery, esto resolverá todos sus problemas.

está incluyendo albañilería en su página HTML/PHP con algo como esto:

<script src="js/masonry.min.js"></script> 
<script> 
    $('#ms-container').masonry({ 
     columnWidth: '.ms-item', 
     itemSelector: '.ms-item' 
    }); 
</script> 

En su lugar, dejarlo así:

<script src="js/masonry.min.js"></script> 
<script src="js/masonry-init.js"></script> 

y crear el archivo js/masonry-init.js con lo siguiente:

$('#ms-container').masonry({ 
    columnWidth: '.ms-item', 
    itemSelector: '.ms-item' 
}); 
var masonryUpdate = function() { 
    setTimeout(function() { 
     $('#ms-container').masonry(); 
    }, 500); 
} 
$(document).on('click', masonryUpdate); 
$(document).ajaxComplete(masonryUpdate); 

¡Nunca más vuelvas a preocuparte por eso!

Cuestiones relacionadas