zx-waterfall
Version:
waterfall library of javascript
9 lines (8 loc) • 3.19 kB
JavaScript
/*!
* zx-waterfall v0.1.1
* https://github.com/capricorncd/zx-waterfall#readme
* Copyright © 2019-present, Capricorncd
* Released under the ISC License
* Released on: 2019-03-04 23:46:25
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).ZxWaterfall=e()}(this,function(){"use strict";function r(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function c(t){var e=parseInt(t);return isNaN(e)?0:e}var o={container:null,containerWidth:0,itemSelector:"",gutter:20,verticalGutter:0,itemWidth:300,forceItemWidth:!1,align:"center",computeContainerHeight:!1};return function(){function e(t){if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),!(t=Object.assign({},o,t)).container||1!==t.container.nodeType)throw new TypeError("Instancing parameter 'container' is not HTMLElement.");if(!t.itemSelector||"string"!=typeof t.itemSelector)throw new TypeError("Instancing parameter 'itemSelector' is null or is't a string.");t.verticalGutter||(t.verticalGutter=t.gutter),this.timer=null,this.count=0,this.opts=t,this._init(),this._resizeClone=this._handleResize.bind(this),window.addEventListener("resize",this._resizeClone)}var t,i,n;return t=e,(i=[{key:"_init",value:function(){var t=this.opts,e=c(t.containerWidth)||t.container.offsetWidth,i=Math.floor(e/(t.itemWidth+t.gutter));if(this.itemWidth=t.forceItemWidth?t.itemWidth:(e-(i+1)*t.gutter)/i,this.columns=Array(i),this.columns.fill(0,0),this.offsetLeft=0,t.forceItemWidth){var n=e-(this.itemWidth+t.gutter)*i-t.gutter;switch(t.align){case"center":this.offsetLeft=n/2;break;case"right":this.offsetLeft=n}}}},{key:"_setPosition",value:function(){var t,e,n,r,o=this,s=this.opts,a=(t=s.container.querySelectorAll(s.itemSelector),e=this.count,Array.prototype.slice.call(t,c(e))),i=a.length,l=function(){if(!(r=a[n]))return"continue";r.style.position="absolute",r.style.width=o.itemWidth+"px",r.style.display="inline-block";var e=Math.min.apply(null,o.columns),t=o.columns.findIndex(function(t){return t===e});r.style.top="".concat(e+s.verticalGutter,"px"),r.style.left="".concat(o.offsetLeft+(o.itemWidth+s.gutter)*t+s.gutter,"px");var i=r.offsetHeight;o.columns[t]=e+i+s.verticalGutter,s.computeContainerHeight&&(s.container.style.minHeight=Math.max.apply(null,o.columns)+s.verticalGutter+"px")};for(n=0;n<i;n++)l();this.count+=i}},{key:"update",value:function(){var t=this;this.timer=setTimeout(function(){t._setPosition()},0)}},{key:"reset",value:function(){this.count=0,this._init()}},{key:"_handleResize",value:function(){this.reset(),this._setPosition()}},{key:"loadMedia",value:function(t){return new Promise(function(r){if(Array.isArray(t)&&t.length){var o=t.length,s=0;t.forEach(function(t){var e,i,n;e=t,i=function(){o===++s&&r()},(n=document.createElement("img")).src=e,n.onload=i,n.onerror=i,n=null})}else r()})}},{key:"destroy",value:function(){window.removeEventListener("resize",this._resizeClone),this.timer&&clearTimeout(this.timer)}}])&&r(t.prototype,i),n&&r(t,n),e}()});