diff options
Diffstat (limited to 'resources/js/gallery.js')
-rw-r--r-- | resources/js/gallery.js | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/resources/js/gallery.js b/resources/js/gallery.js index 0289e58..b7b7e06 100644 --- a/resources/js/gallery.js +++ b/resources/js/gallery.js @@ -29,15 +29,26 @@ bricks )); document.addEventListener('DOMContentLoaded', event => { - bricks.resize(true); // bind resize handler + bricks.resize(true).pack(); // bind resize handler & initial pack }); +/** + * packing should be done multiple times. Sometimes the div of + * directories is not properly packed if packing is done only once. + */ // Packing after loading images //////////////////////////////////////////// const onImagesLoaded = (container, event) => { const images = container.getElementsByTagName("img"); const progressBar = document.getElementById("loading-progress"); + // Keeps track of how many times we've packed the images. + let packed = 0; + const incrementPackedAndPack = () => { + packed++; + bricks.pack(); + }; + // failed keeps track of images that failed to load. let failed = 0; let remaining = images.length; @@ -52,6 +63,28 @@ const onImagesLoaded = (container, event) => { progressBar.value = round( ((images.length - remaining) / images.length) * 100 ); + + // pack multiple times for better experience. This way + // the initial pictures are properly visible to the + // user while the other load. It's very cheap to pack + // lots of elements too using bricks.js so it's not an + // issue. + // + // There is no point in specifying such large ranges + // as this runs in a single thread to for sure we'll + // hit the range. + if (5 < progressBar.value && progressBar.value < 20) + if (packed < 2) + incrementPackedAndPack(); + + if (30 < progressBar.value && progressBar.value < 50) + if (packed < 4) + incrementPackedAndPack(); + + if (80 < progressBar.value && progressBar.value < 95) + if (packed < 5) + incrementPackedAndPack(); + if (remaining === failed) event(remaining, failed, progressBar); }); |