Masonry/Dynamic Slideshow Height Issues

I’m a little confused with the next steps to take on a project I’m working on and hopefully you could give me some ideas/help.

http://goo.gl/4d72h

Read More

I’m using WordPress, and a combination of Portfolio Slideshow Pro (http://madebyraygun.com/wordpress/plugins/portfolio-slideshow-pro/) and Masonry (http://masonry.desandro.com/index.html) to create the landing page of this project.

As you can see by visiting the site, each ‘post’ is wrapped in a grid_6 float, allowing two floats per row, and then I am using masonry to place everything together as it does. I’ve wrapped the masonry code in a (window).load function to wait until all the featured images have loaded and then it starts the masonry. Pretty straightforward.

    <script>
    $(window).load(function(){
    var $container = $('.masonry-cont-area');

    $container.imagesLoaded( function(){
      $container.masonry({
        itemSelector : '.single-fg-post'
      });
    });
});
    </script>

However, the masonry is only taking into consideration the first feature image for it’s positioning etc. If you click the images, or the dots, it’ll advance to the next image which can be longer or shorter in height, which is causing a few problems. Because the masonry has already taken place, it’s overlaping with the next post etc. You can see what I mean when you click on the images on the link given above.

So, what I’m after today, is any ideas on how this can be fixed? Can masonry take the height from the tallest image in the slideshow? Can it changes dynamically as the images are clicked? Can I make sure that a margin at the bottom is ALWAYS given on absolute positioned items?

Any ideas would be really appreciated.

Thanks all,
Richard

Related posts

Leave a Reply

2 comments

  1. You slideshow plugin does not seem to expose any event hooks. So you will have to do it the verbose way ..

    Change the code where you initialize the masonry plugin to

    $(window).load(function(){
        var $container = $('.masonry-cont-area');
    
        $container.imagesLoaded( function(){
            $container.masonry({
                itemSelector : '.single-fg-post',
                isAnimated: true // added this line to make the resizing of the masonry animated and not instant..
            });
    
            // whenever we click on a bullet element
            $('.pager').on('click','.bullet', function(){
                // we use timeout to delay the redrawing of masonry
                // because the slideshow takes sometime to fade out the current slide
                // and slide in the new one..
                // We have to wait until the slideshow has completed its transition before
                // redrawing masonry, so that the masonry plugin can use the new slide's dimensions..
                setTimeout(function(){
                    // we make masonry recalculate the element based on their current state.
                    $container.masonry();
                }, 250); // 250 is the milliseconds of delay between the click to the bullet and the calling of the masonry redraw..
            });
        });
    });
    

    See it live at http://jsfiddle.net/XjVWN/embedded/result/