JSFiddle - React, Tailwind, and code Playground

by vanduzled

HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery.isotope/2.0.0/isotope.pkgd.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script>
<div id="controls">
    <ul>
        <li><a id="asc" href="#">Sort Ascending</a>
        </li>
        <li><a id="desc" href="#">Sort Descending</a>
        </li>
        <li><a id="thin" href="#">Narrow Images</a>
        </li>
        <li><a id="all" href="#">All Images</a>
        </li>
    </ul>
</div>
<div id="container" class="isotope">
    <img width="333" height="500" src="http://www.appelsiini.net/projects/lazyload/img/grey.gif" data-original="http://farm5.static.flickr.com/4113/5013039951_3a47ccd509.jpg" alt="Stanley" />
    <img width="369" height="500" src="http://www.appelsiini.net/projects/lazyload/img/grey.gif" data-original="http://farm5.static.flickr.com/4131/5013039885_0d16ac87bc.jpg" alt="Officer" />
    <img width="500" height="333" src="http://www.appelsiini.net/projects/lazyload/img/grey.gif" data-original="http://farm5.static.flickr.com/4086/5013039583_26717f6e89.jpg" alt="Tony" />
    <img width="456" height="500" src="http://www.appelsiini.net/projects/lazyload/img/grey.gif" data-original="http://farm5.static.flickr.com/4146/5013646070_f1f44b1939.jpg" alt="Kendra" />
    <img width="456" height="500" src="http://www.appelsiini.net/projects/lazyload/img/grey.gif" data-original="http://farm5.static.flickr.com/4144/5013039541_17f2579e33.jpg" alt="Giraffe" />
    <img width="333" height="500" src="http://www.appelsiini.net/projects/lazyload/img/grey.gif" data-original="http://farm5.static.flickr.com/4153/5013039741_d860fb640b.jpg" alt="Gavin" />
    <img width="333" height="500" src="http://www.appelsiini.net/projects/lazyload/img/grey.gif" data-original="http://farm5.static.flickr.com/4113/5013039697_a15e41fcd8.jpg" alt="Anita" />
    <img width="359" height="500" src="http://www.appelsiini.net/projects/lazyload/img/grey.gif"...

CSS

#controls ul li {
    float:left;
    margin-right:20px;
}
#container {
    clear:both;
}
/**** Isotope filtering ****/
 .isotope-item {
    z-index: 2;
}
.isotope-hidden.isotope-item {
    pointer-events: none;
    z-index: 1;
}

JavaScript

jQuery(document).ready(function ($) {
    var $win = $(window),
        $imgs = $("img"),
        $con = $('#container').isotope();

    function loadVisible($els, trigger) {
        $els.filter(function () {
            var rect = this.getBoundingClientRect();
            return rect.top >= 0 && rect.top <= window.innerHeight;
        }).trigger(trigger);
    }

    $con.isotope('on', 'layoutComplete', function () {
        loadVisible($imgs, 'lazylazy');
    });

    $win.on('scroll', function () {
        loadVisible($imgs, 'lazylazy');
    });

    $imgs.lazyload({
        effect: "fadeIn",
        failure_limit: Math.max($imgs.length - 1, 0),
        event: 'lazylazy'
    });

    $('#asc').click(function (event) {
        $con.isotope({
            sortAscending: true,
            sortBy: 'original'
        });
    });

    $('#desc').click(function (event) {
        $con.isotope({
            sortAscending: false,
            sortBy: 'original'
        });
    });

    $('#thin').click(function (event) {
        $con.isotope({
            sortAscending: true,
            filter: 'img[width="333"]',
            sortBy: 'original'
        });
    });

    $('#all').click(function (event) {
        $con.isotope({
            sortAscending: true,
            filter: '',
            sortBy: 'original'
        });
    });
});