'use strict'; const round = Math.round; // image width. const imgW = 400; // Gallery using bricks.js //////////////////////////////////////////////////// const sizes = [ { columns: 1, gutter: 30 }, { mq: round((imgW * 2.2) + 40) + "px", columns: 2, gutter: 40 }, { mq: round((imgW * 3.5) + 50) + "px", columns: 3, gutter: 50 }, { mq: round((imgW * 4.5) + 50) + "px", columns: 4, gutter: 50 }, { mq: round((imgW * 5.5) + 60) + "px", columns: 5, gutter: 60 }, ]; const bricks = Bricks({ container: '#gallery', packed: 'data-packed', sizes: sizes }); bricks .on('pack', () => console.log('ALL grid items packed.')) .on('update', () => console.log('NEW grid items packed.')) .on('resize', size => console.log( 'The grid has be re-packed to accommodate a new BREAKPOINT.', size )); document.addEventListener('DOMContentLoaded', event => { bricks.resize(true); // bind resize handler }); // Packing after loading images //////////////////////////////////////////// const onImagesLoaded = (container, event) => { const images = container.getElementsByTagName("img"); const progressBar = document.getElementById("loading-progress"); // failed keeps track of images that failed to load. let failed = 0; let remaining = images.length; for (let i = 0; i < images.length; i++) { if (images[i].complete) remaining--; else { // Add listeners to images that have to be loaded. images[i].addEventListener("load", function () { remaining--; progressBar.value = round( ((images.length - remaining) / images.length) * 100 ); if (remaining === failed) event(remaining, failed, progressBar); }); // If loading fails then we increment failed, an error // will be shown later. images[i].addEventListener("error", function () { failed++; if (remaining === failed) event(remaining, failed, progressBar); }); } if (remaining == failed) event(remaining, failed, progressBar); } }; const gallery = document.getElementById("gallery"); const imagesLoaded = (remaining, failed, progressBar) => { bricks.pack(); // packing images progressBar.value = 100; document.getElementById("loading").style.display = "none"; // Show error on failure. const loadError = document.getElementById("loading-error"); const loadErrorText = document.getElementById("loading-error-text"); const loadErrorDismiss = document.getElementById("loading-error-dismiss"); if (failed !== 0) { loadError.style.display = "block"; const t = failed === 1 ? "image" : "images"; loadErrorText.innerHTML = `${failed} ${t} failed to load.`; loadErrorDismiss.addEventListener('click', function(){ loadError.style.display = "none"; }); } }; onImagesLoaded(gallery, imagesLoaded);