fitview
Version:
8 lines (7 loc) • 2.99 kB
JavaScript
/*!
* fitview v0.3.3
* Copyright 2024 Pbstar (https://github.com/pbstar)
* Licensed under MIT (https://github.com/pbstar/fitview/blob/main/LICENSE)
* 2025-06-11 10:49:55
*/
function e(e,t,s,r){if("a"===s&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?r:"a"===s?r.call(e):r?r.value:t.get(e)}var t;"function"==typeof SuppressedError&&SuppressedError;class s{constructor(s){if(t.set(this,{el:null,fit:"contain",resize:!0,vw:0,vh:0,dw:1920,dh:1080,resizeObserver:null}),!s)return void console.warn("config is required");if(!(s.el&&s.el instanceof HTMLElement))return void console.warn("el is required");if(1!=s.el.children.length)return void console.warn("el must have only one child element");const r=["fill","contain","scroll","hidden"];if(e(this,t,"f").el=s.el,e(this,t,"f").resize=s.resize||!0,s.fit){if(!r.includes(s.fit))return void console.warn("fit must be one of fill, contain, scroll, hidden");e(this,t,"f").fit=s.fit}const i=()=>{const s=function(e){const t={vw:0,vh:0,dw:1920,dh:1080},s=e.children[0];return s?e.offsetWidth>0&&e.offsetHeight>0&&s.offsetWidth>0&&s.offsetHeight>0?{vw:e.offsetWidth,vh:e.offsetHeight,dw:s.offsetWidth,dh:s.offsetHeight}:(console.warn("el and its child element must have width and height"),t):(console.warn("el must have only one child element"),t)}(e(this,t,"f").el);e(this,t,"f").vw=s.vw,e(this,t,"f").vh=s.vh,e(this,t,"f").dw=s.dw,e(this,t,"f").dh=s.dh,function(e){const t=Math.round(e.vw/e.dw*1e3)/1e3,s=Math.round(e.vh/e.dh*1e3)/1e3,r=e.el,i=e.el.children[0];if(i.style.transformOrigin="0 0",r.style.overflow="hidden",r.style.scrollbarColor="rgba(255, 255, 255, 0.3) rgba(255, 255, 255, 0.1)","fill"==e.fit)i.style.transform=`scale( ${t}, ${s} )`;else if("contain"==e.fit)if(t>s){i.style.transform=`scale( ${s}, ${s} )`;const t=Math.round((e.vw-e.dw*s)/2);i.style.marginLeft=`${t}px`}else i.style.transform=`scale( ${t}, ${t} )`,i.style.marginLeft="0";else if("scroll"==e.fit)t>s?(i.style.transform=`scale( ${t}, ${t} )`,r.style.overflowX="hidden",r.style.overflowY="scroll",i.style.marginRight="0",i.style.marginBottom=`${Math.round(e.vh-e.dh)}px`):(i.style.transform=`scale( ${s}, ${s} )`,r.style.overflowX="scroll",r.style.overflowY="hidden",i.style.marginRight=`${Math.round(e.vw-e.dw)}px`,i.style.marginBottom="0");else if("hidden"==e.fit)if(t>s)i.style.transform=`scale( ${t}, ${t} )`,i.style.marginLeft="0";else{i.style.transform=`scale( ${s}, ${s} )`;const t=Math.round((e.dw*s-e.vw)/2);i.style.marginLeft=`-${t}px`}}(e(this,t,"f"))};e(this,t,"f").resize?(e(this,t,"f").resizeObserver=new ResizeObserver((()=>{i()})),e(this,t,"f").resizeObserver.observe(e(this,t,"f").el)):i(),this.api={refresh:i,destroyResize:()=>{e(this,t,"f").resizeObserver&&(e(this,t,"f").resizeObserver.disconnect(),e(this,t,"f").resizeObserver=null)}}}}t=new WeakMap;export{s as default};