It's quite straightforward to achieve this functionality. Normally, when you click on an Isotope .item, it can be maximised and minimised by subsequent clicks. To add interactivity inside a clicked-on Isotope .item, simply exclude the minimisation function from that specific item. Instead, clicking on another Isotope .item will minimise the previously selected (maximised) item. By keeping track of the previously selected .item, interactions within the maximised .item won't close it. Here's a basic logic for enabling maximising and minimising only through clicking on a "header" zone within each Isotope .item:
$(document).ready(function () {
var $container = $('#container');
$container.isotope({
itemSelector: '.item',
masonry: {
columnWidth: 128 // corresponds to the width relationships of .item divs
}
});
// $container.isotope('shuffle'); // randomise for new visitors
$items = $('.item'); // to reference methods on all .item divs later
$('.header').click(function () { // register clicks only on the .header div within .item
var $previousSelected = $('.selected'); // required for switching
if ($(this).parent().hasClass('selected')) {
$(this).parent().removeClass('selected');
$(this).parent().children('.maximised').hide();
$(this).parent().children('.minimised').show();
$items.find('.minimised, .header').removeClass('overlay');
} else {
$previousSelected.removeClass('selected');
$previousSelected.children('.minimised').show();
$previousSelected.children('.maximised').hide();
$(this).parent().addClass('selected');
$(this).parent().children('.minimised').hide();
$(this).parent().children('.maximised').show();
$items.not('.selected').find('.minimised, .header').addClass('overlay');
}
$container.isotope('reLayout');
});
});
You can customize the interactivity within each Isotope .item as needed; whether hardcoded or dynamically...