PageSourceSearch

https://www.valgardena.it/_assets/dbd72494ce661da673f276522ca3c07e…/modules/chunks/ScrollAnimation-3A7PNB63.js

js valgardena.it collected 2026-10-02 06:41:52 UTC 7,540 bytes, 2 lines download raw bytes

1import{__name,__publicField}from"./chunk-A6LPM36J.js";var _CssCalc=class _CssCalc{static updateCache(){this.cache.rem=this.compute("1rem"),this.cache.vw=this.compute("1vw"),this.cache.vh=this.compute("1vh")}static compute(expression){let el=document.createElement("div");el.style.position="absolute",el.style.visibility="hidden",el.style.width=expression,document.body.appendChild(el);let value=el.offsetWidth;return document.body.removeChild(el),value}static toPx(expression){return expression==="1rem"?this.cache.rem??this.compute("1rem"):expression==="1vw"?this.cache.vw??this.compute("1vw"):expression==="1vh"?this.cache.vh??this.compute("1vh"):this.compute(expression)}static refresh(){this.updateCache()}};__name(_CssCalc,"CssCalc"),__publicField(_CssCalc,"cache",{rem:null,vw:null,vh:null});var CssCalc=_CssCalc;var _ScrollAnimation=class _ScrollAnimation{constructor(container,element){if(typeof container>"u"||typeof element>"u"||(this.container=$(container).get(0),this.element=$(element).get(0),!this.container||!this.element))return!1;$(this.element).addClass("scroll-animation-element"),this.proxyScrollHeight=0,this.minWidth=1,this.maxWidth=1,this.elementOffset=0,this.elementHeight=0,this.scrollProxy=0,this.additionalScroll=0,this.lastScrollY=window.scrollY||0,this.isSyncing=!1,this.inView=!0,this.pendingRaf=null,this.io=null,this.ro=null,this.onWheel=this.onWheel.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.onResize=this.onResize.bind(this),this.onScroll=this.onScroll.bind(this),this.lastTouchY=null,this.init()}clamp(val,min,max){return Math.max(min,Math.min(max,val))}isFancyboxOpen(){return document.documentElement.classList.contains("with-fancybox")}isElementInViewport(){if(this.io)return this.inView;let rect=this.element.getBoundingClientRect(),vh=window.innerHeight||document.documentElement.clientHeight;return rect.top<vh&&rect.bottom>0}measureConfig(){let styles=getComputedStyle(this.container),heightVar=styles.getPropertyValue("--scroll-animation-height").trim(),minMaxWidthVar=styles.getPropertyValue("--scroll-animation-min-max-width").trim(),minPaddingVar=styles.getPropertyValue("--scroll-animation-min-padding").trim();heightVar||(heightVar=this.container.getAttribute("data-scroll-animation-height")||"0px"),minMaxWidthVar||(minMaxWidthVar=this.container.getAttribute("data-scroll-animation-min-width")||"0px"),minMaxWidthVar||(minPaddingVar=this.container.getAttribute("data-scroll-animation-min-padding")||"40px");let minMaxWidthPx=CssCalc.toPx(minMaxWidthVar||"0px")||0,minPaddingPx=CssCalc.toPx(minPaddingVar||"0px")||0,containerWidth=this.container.getBoundingClientRect().width;this.minWidth=Math.min(Math.max(containerWidth-minPaddingPx,0),minMaxWidthPx),this.proxyScrollHeight=CssCalc.toPx(heightVar||"0px")||0}measureLayout(){this.maxWidth=$(this.container).outerWidth()||1;let offset=$(this.element).offset();this.elementOffset=offset?offset.top:0,this.elementHeight=this.element.offsetHeight||0}readConfig(){this.measureConfig(),this.measureLayout()}computeProgress(){return this.proxyScrollHeight?this.clamp(this.scrollProxy/this.proxyScrollHeight,0,1):0}applyStyles(progress){this.container.style.setProperty("--scroll-animation-proxy-progress",`${progress*100}%`),this.maxWidth<=this.minWidth&&(this.minWidth=this.maxWidth);let scale=1+(this.minWidth/this.maxWidth-1)*progress;this.element.style.transform=`scale(${scale})`,this.adjustScrollForVirtualGap(scale,progress)}requestUpdate(){this.pendingRaf||(this.pendingRaf=requestAnimationFrame(()=>{this.pendingRaf=null;let progress=this.computeProgress();this.applyStyles(progress)}))}update(){this.requestUpdate()}syncWithScroll(){if(!this.container||!this.element)return;this.readConfig();let y=window.scrollY||window.pageYOffset||0,pastTop=Math.max(0,y-this.elementOffset);if(this.proxyScrollHeight>0){let progress=this.clamp(pastTop/this.proxyScrollHeight,0,1);this.scrollProxy=progress*this.proxyScrollHeight,this.isSyncing=!0,this.update(),this.isSyncing=!1}else this.scrollProxy=0,this.update()}adjustScrollForVirtualGap(scale,progress){let currentGap=this.elementHeight*(1-scale),maskHeight=this.proxyScrollHeight*progress,scrollY=Math.max(0,currentGap-maskHeight);if(scrollY>0){if(this.additionalScroll=scrollY,this.isSyncing)return;window.scrollTo({top:scrollY,left:0,behavior:"smooth"})}}handleDelta(deltaY,e){if(this.isFancyboxOpen()||!this.proxyScrollHeight)return;let threshold=200+Math.abs(deltaY)*.3,nextScrollY=this.lastScrollY+deltaY,direction=Math.sign(deltaY);
1if(direction===0)return;let inView=this.isElementInViewport(),canScrollDownProxy=direction>0&&inView&&this.scrollProxy<this.proxyScrollHeight,canScrollUpProxy=direction<0&&inView&&this.scrollProxy>0&&nextScrollY-this.additionalScroll<=this.elementOffset+threshold;(canScrollDownProxy||canScrollUpProxy)&&(e&&e.preventDefault&&e.preventDefault(),this.scrollProxy=this.clamp(this.scrollProxy+deltaY,0,this.proxyScrollHeight),this.update())}onWheel(e){let deltaY=(e.deltaY||0)/3;this.handleDelta(deltaY,e)}onTouchStart(e){e.touches&&e.touches.length>0&&(this.lastTouchY=e.touches[0].clientY)}onTouchMove(e){if(this.proxyScrollHeight&&this.isElementInViewport()&&e.touches&&e.touches.length>0&&this.lastTouchY!==null){let currentY=e.touches[0].clientY,deltaY=this.lastTouchY-currentY;this.lastTouchY=currentY,this.handleDelta(deltaY,e)}}onTouchEnd(){this.lastTouchY=null}attachObservers(){"IntersectionObserver"in window&&(this.io=new IntersectionObserver(entries=>{for(let entry of entries)entry.target===this.element&&(this.inView=entry.isIntersecting)},{root:null,threshold:[0,.01,.99,1]}),this.io.observe(this.element)),"ResizeObserver"in window&&(this.ro=new ResizeObserver(()=>{this.measureLayout(),this.update()}),this.ro.observe(this.container),this.ro.observe(this.element))}detachObservers(){this.io&&(this.io.disconnect(),this.io=null),this.ro&&(this.ro.disconnect(),this.ro=null)}onResize(){CssCalc.refresh&&CssCalc.refresh(),this.readConfig(),this.syncWithScroll()}onScroll(){this.lastScrollY=window.scrollY||0}attachListeners(){this.container.addEventListener("wheel",this.onWheel,{passive:!1}),this.container.addEventListener("touchstart",this.onTouchStart,{passive:!0}),this.container.addEventListener("touchmove",this.onTouchMove,{passive:!1}),this.container.addEventListener("touchend",this.onTouchEnd,{passive:!0}),this.container.addEventListener("touchcancel",this.onTouchEnd,{passive:!0}),window.addEventListener("resize",this.onResize),window.addEventListener("scroll",this.onScroll)}detachListeners(){this.container.removeEventListener("wheel",this.onWheel),this.container.removeEventListener("touchstart",this.onTouchStart),this.container.removeEventListener("touchmove",this.onTouchMove),this.container.removeEventListener("touchend",this.onTouchEnd),this.container.removeEventListener("touchcancel",this.onTouchEnd),window.removeEventListener("resize",this.onResize),window.removeEventListener("scroll",this.onScroll)}init(){this.readConfig(),this.syncWithScroll(),this.attachObservers(),this.attachListeners()}destroy(){this.detachListeners(),this.detachObservers(),this.pendingRaf&&(cancelAnimationFrame(this.pendingRaf),this.pendingRaf=null),this.container.style.removeProperty("--scroll-animation-proxy-progress"),this.element.style.removeProperty("transform")}};__name(_ScrollAnimation,"ScrollAnimation");var ScrollAnimation=_ScrollAnimation;export{ScrollAnimation};
2//# sourceMappingURL=ScrollAnimation-3A7PNB63.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.