Сначала создайте скрытый div и поместите в него реальные данные. В этом примере мы называем это #hidden. Затем создайте пустой div для основного масонства. Мы называем это # масонством. Итак, пока у нас есть что-то вроде этого:
<div id="hidden"> ... CONTAINING THE ACTUAL DATA ... </div>
<div id="masonry"></div> <!-- which is a blank div -->
Элементы будут обнаружены по их data-rel, поэтому не забудьте все фильтры как относящиеся к элементам. Например:
<div class="work" data-rel="Template Design">CONTENT</div>
В качестве фильтров создайте список, подобный этому:
<ul id="port_filter">
<li data-rel="all" class="active">All</li>
<li data-rel="Graphic Design">Graphic Design</li>
<li data-rel="Template Design">Template Design</li>
<li data-rel="Programming">Programming</li>
</ul>
Теперь обработайте функции начального заполнения и фильтрации следующим образом:
// Initial loading
var all = $('#hidden .work');
$('#masonry').html(all);
$('#masonry').masonry({
itemSelector: '.work',
columnWidth: 299
});
// Portfolio filtering
$('#port_filter li').click(function(){
if($(this).hasClass('active')) {
return;
}
else {
$('#port_filter li').removeClass('active');
var filter = $(this).attr('data-rel');
$(this).addClass('active');
if(filter == 'all') {
$('#masonry').html(all);
$('#masonry').masonry();
}
else {
$('#masonry').html('').html(all);
removed = null;
var removed = $('#masonry .work[data-rel!="' + filter + '"]');
removed.remove();
$('#masonry').masonry();
}
}
});
Этот метод протестирован на Masonry v4 и является лучшим.