PageSourceSearch

https://amsale.com/cdn/shop/t/170/assets/product-zoom.js?v=74273620392434418831784135490

js amsale.com collected 2026-10-03 21:56:48 UTC 24,722 bytes, 29 lines download raw bytes

1(function($){let modalSlider=null,modalOpening=!1,currentZoomImage=null,isZoomed=!1;const ZOOM_SCALE=1.8;let isScrolling=!1,scrollTimer=null;$(function(){$(".main-slider-wrapper").on("scroll",function(){isScrolling=!0,clearTimeout(scrollTimer),scrollTimer=setTimeout(()=>{isScrolling=!1},160)}),bindInlineHoverZoom(),bindGlobalModalEvents(),bindPinchZoom()});function bindGlobalModalEvents(){$(document).on("click",".product-image-modal-trigger",function(e){if(e.preventDefault(),window.innerWidth<=768){var clickedSrc=$(this).data("modal-image")||$(this).attr("src");openImageModal(clickedSrc)}}),$(document).on("click","#modal-close",closeImageModal).on("click","#modal-overlay",closeImageModal).on("click","#modal-zoom-toggle",function(){toggleZoom(getActiveSlideImage())}),$(document).on("keydown.modalNav",function(e){if(e.key==="Escape")return closeImageModal();$("#product-image-modal").is(":visible")&&(e.key==="ArrowRight"&&slickGo(1),e.key==="ArrowLeft"&&slickGo(-1),e.key==="z"&&$("#modal-zoom-toggle").trigger("click"))}),$(document).off("wheel.modalZoom").on("wheel.modalZoom","#product-image-modal .modal-main-image",function(e){if(!isZoomed)return;e.preventDefault();const delta=Math.sign(e.originalEvent.deltaY),img=$(this);let current=parseFloat(img.data("z")||ZOOM_SCALE);current+=delta*-.2,current=Math.min(Math.max(1,current),5),img.data("z",current);const m=img.data("pan")||{x:0,y:0};img.css("transform",`scale(${current}) translate(${m.x/current}px, ${m.y/current}px)`),current<=1.1&&resetZoomState()})}function bindInlineHoverZoom(){$(document).off(".inlineZoom").on("click.inlineZoom",".slide",function(e){if(isScrolling)return;const $slide=$(this),$img=$slide.children("img"),isCurrentlyZoomed=$slide.hasClass("inline-zoomed");if($(".slide.inline-zoomed").removeClass("inline-zoomed").children("img").css({transform:"scale(1)","transform-origin":"center center"}),!isCurrentlyZoomed){const scale=parseFloat($slide.attr("data-scale"))||2;$slide.addClass("inline-zoomed"),$img.css({transform:"scale("+scale+")","transform-origin":"center center"})}}).on("mousemove.inlineZoom",".slide.inline-zoomed",function(e){const $slide=$(this),$img=$slide.children("img"),scale=parseFloat($slide.attr("data-scale"))||1.3,off=$slide.offset(),x=(e.pageX-off.left)/$slide.width()*100,y=(e.pageY-off.top)/$slide.height()*100;$img.css({transform:"scale("+scale+")","transform-origin":x+"% "+y+"%"})}).on("mouseleave.inlineZoom",".slide.inline-zoomed",function(){const $slide=$(this),$img=$slide.children("img");$slide.removeClass("inline-zoomed"),$img.css({transform:"scale(1)","transform-origin":"center center"})})}function bindPinchZoom(){let initialDistance=0,initialScale=1,currentScale=1,isPinching=!1,pinchStarted=!1,isPanning=!1,panStartX=0,panStartY=0,translateX=0,translateY=0,savedTransformOrigin="center center";function resetAllZoom(){console.log("[Zoom] Resetting all zoom"),$(".slide.inline-zoomed").each(function(){const $slide=$(this),$img=$slide.children("img");$slide.removeClass("inline-zoomed"),$img.css({transform:"scale(1)","transform-origin":"center center",transition:"transform 0.3s ease-out","will-change":"","-webkit-backface-visibility":"","backface-visibility":"","-webkit-perspective":"",perspective:"","-webkit-transform-style":"","transform-style":""}),hideZoomButton($slide)});const $imageMain=$(".image-main");$imageMain.length&&$imageMain.hasClass("slick-initialized")&&(console.log("[Zoom] Re-enabling Slick slider in resetAllZoom"),$imageMain.slick("slickSetOption","swipe",!0,!1),$imageMain.slick("slickSetOption","draggable",!0,!1),$imageMain.slick("slickSetOption","touchMove",!0,!1)),currentScale=1,translateX=0,translateY=0,savedTransformOrigin="center center",isPanning=!1,isPinching=!1}function disableSlickForZoom(){const $imageMain=$(".image-main");$imageMain.length&&$imageMain.hasClass("slick-initialized")&&($imageMain.slick("slickSetOption","swipe",!1,!1),$imageMain.slick("slickSetOption","draggable",!1,!1),$imageMain.slick("slickSetOption","touchMove",!1,!1))}function showZoomButton($slide){console.log("[Zoom] Showing zoom-out button"),$slide.find(".zoom-btn-wrapper").remove(),$slide.css("position","relative");const iconSrc=window.zoomIconAssets?window.zoomIconAssets.zoomOut:"/assets/zoom-out.svg",$button=$(`
2        <div class="zoom-btn-wrapper" style="
3          position: absolute;
4          top: 10px;
5          right: 10px;
6          z-index: 1000;
7          pointer-events: auto;
8        ">
9          <button class="zoom-toggle-btn" style="
10            background: rgba(255, 255, 255, 0.9);
11            border: 1px solid rgba(0, 0, 0, 0.2);
12            border-radius: 4px;
13            width: 40px;
14            height: 40px;
15            cursor: pointer;
16            display: flex;
17            align-items: center;
18            justify-content: center;
19            box-shadow: 0 2px 4px rgba(0,0,0,0.2);
20            padding: 8px;
21          " title="Zoom out">
22            <img src="${iconSrc}" alt="Zoom out" style="width: 100%; height: 100%;" class="zoom-icon-img" />
23          </button>
24        </div>
25      `);$slide.append($button),$button.find(".zoom-toggle-btn").on("click touchend",function(e){if(e.stopPropagation(),e.preventDefault(),e.type==="touchend"&&$(this).data("handling"))return;$(this).data("handling",!0),setTimeout(()=>$(this).data("handling",!1),300);const $img=$slide.children("img");console.log("[Zoom] Zoom-out button clicked, currentScale:",currentScale),currentScale=1,translateX=0,translateY=0,isPanning=!1,isPinching=!1,$slide.removeClass("inline-zoomed"),$img.css({transform:"scale(1)","transform-origin":"center center",transition:"transform 0.3s ease-out","will-change":"","-webkit-backface-visibility":"","backface-visibility":"","-webkit-perspective":"",perspective:"","-webkit-transform":"scale(1)","-webkit-transform-style":"","transform-style":"","touch-action":""}),hideZoomButton($slide);const $imageMain=$(".image-main");$imageMain.length&&$imageMain.hasClass("slick-initialized")&&(console.log("[Zoom] Re-enabling Slick slider after zoom out"),$imageMain.slick("slickSetOption","swipe",!0,!1),$imageMain.slick("slickSetOption","draggable",!0,!1),$imageMain.slick("slickSetOption","touchMove",!0,!1))})}function hideZoomButton($slide){console.log("[Zoom] Hiding zoom button"),$slide?$slide.find(".zoom-btn-wrapper").remove():$(".zoom-btn-wrapper").remove()}$(".image-main").on("beforeChange.zoomReset",function(event,slick,currentSlide,nextSlide){console.log("[Zoom] Slider about to change - resetting zoom"),!isPinching&&!isPanning&&resetAllZoom()});function getDistance(touches){const touch1=touches[0],touch2=touches[1],dx=touch2.clientX-touch1.clientX,dy=touch2.clientY-touch1.clientY;return Math.sqrt(dx*dx+dy*dy)}function getCenter(touches){const touch1=touches[0],touch2=touches[1];return{x:(touch1.clientX+touch2.clientX)/2,y:(touch1.clientY+touch2.clientY)/2}}let tapStartTime=0,tapStartX=0,tapStartY=0;$(document).off(".pinchZoom").on("touchstart.pinchZoom",".slide img",function(e){const touches=e.originalEvent.touches;if(touches.length===1&&(tapStartTime=Date.now(),tapStartX=touches[0].clientX,tapStartY=touches[0].clientY),touches.length===2){e.preventDefault(),e.stopPropagation(),isPinching=!0,pinchStarted=!0,isPanning=!1,disableSlickForZoom(),initialDistance=getDistance(touches);
25const currentTransform=$(this).css("transform");if(currentTransform&&currentTransform!=="none"){const matrix=currentTransform.match(/matrix\\((.+)\\)/);if(matrix){const values=matrix[1].split(",");currentScale=parseFloat(values[0])||1}}else currentScale=1;initialScale=currentScale}else if(touches.length===1){const $img=$(this);if($img.closest(".slide").hasClass("inline-zoomed")){e.preventDefault(),e.stopPropagation(),$img.css("touch-action","none"),disableSlickForZoom();const currentTransform=$img.css("transform");if(currentTransform&&currentTransform!=="none"){const matrixMatch=currentTransform.match(/matrix(?:3d)?\\(([^)]+)\\)/);matrixMatch&&(currentScale=matrixMatch[1].split(",").map(v=>parseFloat(v.trim()))[0]||1)}const origin=$img.css("transform-origin");origin&&(savedTransformOrigin=origin),isPanning=!0,panStartX=touches[0].clientX,panStartY=touches[0].clientY,translateX===0&&translateY===0&&(translateX=0,translateY=0)}}}).on("touchmove.pinchZoom",".slide img",function(e){const touches=e.originalEvent.touches;if(touches.length===1&&isPanning&&!isPinching&&currentScale>1){e.preventDefault(),e.stopPropagation();const deltaX=touches[0].clientX-panStartX,deltaY=touches[0].clientY-panStartY;translateX+=deltaX,translateY+=deltaY;const $img=$(this),$container=$img.parent(),containerWidth=$container.width(),containerHeight=$container.height(),img=this,displayedWidth=img.offsetWidth||img.clientWidth,displayedHeight=img.offsetHeight||img.clientHeight,scaledWidth=displayedWidth*currentScale,scaledHeight=displayedHeight*currentScale,overflowX=Math.max(0,scaledWidth-containerWidth),overflowY=Math.max(0,scaledHeight-containerHeight),maxPanX=overflowX/2,maxPanY=overflowY/2;translateX=Math.max(-maxPanX,Math.min(maxPanX,translateX)),translateY=Math.max(-maxPanY,Math.min(maxPanY,translateY)),panStartX=touches[0].clientX,panStartY=touches[0].clientY,requestAnimationFrame(()=>{$img.css({transform:`scale(${currentScale}) translate(${translateX/currentScale}px, ${translateY/currentScale}px)`,"transform-origin":savedTransformOrigin,transition:"none","will-change":"transform","-webkit-backface-visibility":"hidden","backface-visibility":"hidden","-webkit-perspective":"1000",perspective:"1000","-webkit-transform":`scale(${currentScale}) translate(${translateX/currentScale}px, ${translateY/currentScale}px)`,"-webkit-transform-style":"preserve-3d","transform-style":"preserve-3d"})});return}if(touches.length===2&&isPinching){e.preventDefault();const normalizedScale=1+(getDistance(touches)/initialDistance*initialScale-1)*.4;currentScale=Math.min(Math.max(normalizedScale,1),2.5);const $img=$(this),$slide=$img.closest(".slide");if(currentScale>1){$slide.addClass("inline-zoomed"),showZoomButton($slide),disableSlickForZoom();const $container=$img.parent(),containerWidth=$container.width(),containerHeight=$container.height(),img=this,displayedWidth=img.offsetWidth||img.clientWidth,displayedHeight=img.offsetHeight||img.clientHeight,scaledWidth=displayedWidth*currentScale,scaledHeight=displayedHeight*currentScale,overflowX=Math.max(0,scaledWidth-containerWidth),overflowY=Math.max(0,scaledHeight-containerHeight),maxPanX=overflowX/2,maxPanY=overflowY/2;translateX=Math.max(-maxPanX,Math.min(maxPanX,translateX)),translateY=Math.max(-maxPanY,Math.min(maxPanY,translateY));const center=getCenter(touches),imgRect=this.getBoundingClientRect(),originX=(center.x-imgRect.left)/imgRect.width*100,originY=(center.y-imgRect.top)/imgRect.height*100;requestAnimationFrame(()=>{$img.css({transform:`scale(${currentScale}) translate(${translateX/currentScale}px, ${translateY/currentScale}px)`,"transform-origin":`${originX}% ${originY}%`,transition:"none","will-change":"transform","-webkit-backface-visibility":"hidden","backface-visibility":"hidden","-webkit-perspective":"1000",perspective:"1000","-webkit-transform":`scale(${currentScale}) translate(${translateX/currentScale}px, ${translateY/currentScale}px)`,"-webkit-transform-style":"preserve-3d","transform-style":"preserve-3d"})})}else{console.log("[Zoom] Pinch zoomed out to scale < 1, resetting to 1"),$slide.removeClass("inline-zoomed"),translateX=0,translateY=0,currentScale=1,$img.css({transform:"scale(1)","transform-origin":"center center",transition:"transform 0.2s ease-out","will-change":"","-webkit-backface-visibility":"","backface-visibility":"","-webkit-perspective":"",perspective:"","-webkit-transform":"scale(1)","-webkit-transform-style":"","transform-style":"","touch-action":""}),hideZoomButton($slide);const $imageMain=$(".image-main");$imageMain.length&&$imageMain.hasClass("slick-initialized")&&(console.log("[Zoom] Re-enabling Slick after pinch zoom out"),$imageMain.slick("slickSetOption","swipe",!0,!1),$imageMain.slick("slickSetOption","draggable",!0,!1),$imageMain.slick("slickSetOption","touchMove",!0,!1))}}}).on("touchend.pinchZoom touchcancel.pinchZoom",".slide img",function(e){const touches=e.originalEvent.changedTouches;if(touches.length===1){const tapEndTime=Date.now(),tapEndX=touches[0].clientX,tapEndY=touches[0].clientY,tapDuration=tapEndTime-tapStartTime,tapDistanceX=Math.abs(tapEndX-tapStartX),tapDistanceY=Math.abs(tapEndY-tapStartY),tapDistance=Math.sqrt(tapDistanceX*tapDistanceX+tapDistanceY*tapDistanceY);if(tapDuration<400&&tapDistance<20){const $img=$(this),$slide=$img.closest(".slide");if($slide.hasClass("inline-zoomed")&&!isPinching){console.log("[Zoom] Tap detected on zoomed image - unzooming (duration:",tapDuration,"distance:",tapDistance,")"),$slide.removeClass("inline-zoomed"),$img.css({transform:"scale(1)","transform-origin":"center center",transition:"transform 0.3s ease-out","touch-action":"","will-change":"","-webkit-backface-visibility":"","backface-visibility":"","-webkit-perspective":"",perspective:"","-webkit-transform":"scale(1)","-webkit-transform-style":"","transform-style":""}),currentScale=1,translateX=0,translateY=0,savedTransformOrigin="center center",hideZoomButton($slide);const $imageMain=$(".image-main");$imageMain.length&&$imageMain.hasClass("slick-initialized")&&($imageMain.slick("slickSetOption","swipe",!0,!1),$imageMain.slick("slickSetOption","draggable",!0,!1),$imageMain.slick("slickSetOption","touchMove",!0,!1),console.log("[Zoom] Slick slider re-enabled after tap")),isPanning=!1,isPinching=!1;return}}}if(isPinching){isPinching=!1;const $img=$(this),$slide=$img.closest(".slide");if(currentScale<1.15){console.log("[Zoom] Touchend - scale < 1.15, resetting to 1"),$slide.removeClass("inline-zoomed"),$img.css({transform:"scale(1)","transform-origin":"center center",transition:"transform 0.3s ease-out","touch-action":"","-webkit-transform":"scale(1)"}),currentScale=1,translateX=0,translateY=0,savedTransformOrigin="center center",isPanning=!1,isPinching=!1,hideZoomButton($slide);const $imageMain=$(".image-main");$imageMain.length&&$imageMain.hasClass("slick-initialized")&&(console.log("[Zoom] Re-enabling Slick after touchend reset"),$imageMain.slick("slickSetOption","swipe",!0,!1),$imageMain.slick("slickSetOption","draggable",!0,!1),$imageMain.slick("slickSetOption","touchMove",!0,!1))}else $img.css({transition:"transform 0.2s ease-out"}),showZoomButton($slide);pinchStarted&&setTimeout(()=>{pinchStarted=!1},150)}isPanning&&(console.log("[Zoom] Resetting isPanning flag"),isPanning=!1),isPinching&&(console.log("[Zoom] Resetting isPinching flag (fallback)"),isPinching=!1)}),$(document).on("click.pinchZoom",".slide",function(e){if(pinchStarted||isPanning)return e.preventDefault(),e.stopImmediatePropagation(),!1});let lastTap=0;$(document).on("touchend.pinchZoom",".slide",function(e){const currentTime=new Date().getTime(),tapLength=currentTime-lastTap;if(tapLength<500&&tapLength>0&&!pinchStarted){e.preventDefault();const $slide=$(this),$img=$slide.children("img");$slide.removeClass("inline-zoomed"),$img.css({transform:"scale(1)","transform-origin":"center center",transition:"transform 0.3s ease-out","touch-action":""}),currentScale=1,translateX=0,translateY=0,savedTransformOrigin="center center",setTimeout(()=>{$img.css("transition","")},300)}lastTap=currentTime})}function collectImages(){const arr=[],seenUrls=new Set;
25let visibleIndex=0,skippedClones=0,skippedHidden=0,skippedColor=0,skippedDuplicates=0;const activeColor=$(".swatch-element.active-swatch").attr("data-colorname-value");return console.log("[Modal] Active color:",activeColor),$(".product-image-modal-trigger").each(function(i){const $img=$(this),$slide=$img.closest(".slide");if($slide.length&&$slide.hasClass("slick-cloned")){skippedClones++;return}if($slide.length){if($slide.css("display")==="none"||!$slide.is(":visible")){skippedHidden++;return}if(activeColor){const slideColor=($slide.attr("data-color")||$slide.data("color")||"").toString(),slideColorLower=slideColor.toLowerCase(),activeColorLower=activeColor.toLowerCase();if(slideColor&&slideColorLower!==activeColorLower){skippedColor++;return}}}if($img.is(":visible")){const src=$img.data("modal-image")||$img.attr("src");if(seenUrls.has(src)){skippedDuplicates++,console.log("[Modal] Skipping duplicate:",src);return}seenUrls.add(src),console.log("[Modal] Adding image",visibleIndex+1,":",src),arr.push({src,alt:$img.attr("alt")||"",idx:visibleIndex}),visibleIndex++}}),console.log("[Modal] Collected",arr.length,"unique images for color:",activeColor||"all"),console.log("[Modal] Skipped:",skippedClones,"clones,",skippedHidden,"hidden,",skippedColor,"wrong color,",skippedDuplicates,"duplicates"),arr}function openImageModal(clickedSrc){if(modalOpening)return;modalOpening=!0;const images=collectImages();if(!images.length){modalOpening=!1;return}let startIndex=0;if(clickedSrc){for(let i=0;i<images.length;i++)if(images[i].src===clickedSrc){startIndex=i;break}}const $modal=$("#product-image-modal");if(!$modal.length){modalOpening=!1;return}const $slider=$modal.find(".modal-slider");if(resetZoomState(),$("#modal-zoom-toggle").attr("aria-pressed","false"),modalSlider&&$slider.hasClass("slick-initialized"))try{$slider.slick("unslick")}catch{}const html=images.map(img=>`
26      <div class="modal-slide" data-index="${img.idx}">
27        <img src="${img.src}" alt="${escapeHtml(img.alt)}" class="modal-main-image" draggable="false" />
28      </div>`).join("");$slider.html(html),$modal.addClass("active").fadeIn(160).attr("aria-hidden","false").removeAttr("inert"),$("body").addClass("modal-open"),setTimeout(()=>{initSlick($slider,startIndex,images.length),modalOpening=!1},40)}function initSlick($slider,startIndex,total){try{modalSlider=$slider.slick({slidesToShow:1,slidesToScroll:1,arrows:!0,dots:!1,infinite:!0,speed:380,cssEase:"cubic-bezier(.4,0,.2,1)",initialSlide:startIndex,responsive:[{breakpoint:768,settings:{arrows:!1}
28}]}),$("#modal-total-count").text(total),updateCounter(),$slider.on("afterChange",function(){resetZoomState(),updateCounter()}),$slider.on("click",".modal-main-image",function(e){$(e.target).closest(".slick-arrow").length||toggleZoom($(this))})}catch(err){console.error("[Modal] init slick error",err)}}function slickGo(delta){modalSlider&&$(".modal-slider").slick("slick"+(delta>0?"Next":"Prev"))}function updateCounter(){const $current=$(".modal-slider .slick-current");if(!$current.length)return;const rawIndex=parseInt($current.attr("data-slick-index"),10),total=$(".modal-slider .modal-slide:not(.slick-cloned)").length,logical=(rawIndex%total+total)%total;$("#modal-current-index").text(logical+1)}function getActiveSlideImage(){return $(".modal-slider .slick-current .modal-main-image")}function toggleZoom($img){if(!$img||!$img.length)return;const $btn=$("#modal-zoom-toggle");isZoomed?resetZoomState():($img.closest(".modal-slide").addClass("zoomed"),$img.css({"transform-origin":"center center",transform:`scale(${ZOOM_SCALE})`,"touch-action":"none"}).data("z",ZOOM_SCALE),currentZoomImage=$img,isZoomed=!0,$btn.attr("aria-pressed","true").addClass("is-zoomed"),enablePan($img))}function resetZoomState(){currentZoomImage&&(currentZoomImage.closest(".modal-slide").removeClass("zoomed"),currentZoomImage.css({transform:"scale(1) translate(0,0)","transform-origin":"center center","touch-action":""}).data("z",1).removeData("pan")),currentZoomImage=null,isZoomed=!1,$("#modal-zoom-toggle").attr("aria-pressed","false").removeClass("is-zoomed"),disablePan()}function enablePan($img){let startX=0,startY=0,imgStartX=0,imgStartY=0,isDragging=!1,isPinching=!1,initialDistance=0,initialScale=1;const ns=".zoomPan";function getDistance(touches){const dx=touches[1].clientX-touches[0].clientX,dy=touches[1].clientY-touches[0].clientY;return Math.sqrt(dx*dx+dy*dy)}$img.off(ns).on("mousedown"+ns+" touchstart"+ns,function(e){const touches=e.originalEvent?.touches;if(touches&&touches.length===2){e.preventDefault(),e.stopPropagation(),isPinching=!0,isDragging=!1,initialDistance=getDistance(touches),initialScale=parseFloat($img.data("z")||ZOOM_SCALE);const $slider=$img.closest(".modal-slider");$slider.length&&$slider.hasClass("slick-initialized")&&($slider.slick("slickSetOption","swipe",!1,!1),$slider.slick("slickSetOption","draggable",!1,!1),$slider.slick("slickSetOption","touchMove",!1,!1));return}const evt=e.type.startsWith("touch")?e.originalEvent.touches[0]:e;startX=evt.clientX,startY=evt.clientY;const m=$img.data("pan")||{x:0,y:0};if(imgStartX=m.x,imgStartY=m.y,!e.type.startsWith("touch")||parseFloat($img.data("z")||1)>1.5){isDragging=!0,isPinching=!1,$("body").addClass("grabbing"),e.preventDefault(),e.stopPropagation();const $slider=$img.closest(".modal-slider");$slider.length&&$slider.hasClass("slick-initialized")&&($slider.slick("slickSetOption","swipe",!1,!1),$slider.slick("slickSetOption","draggable",!1,!1),$slider.slick("slickSetOption","touchMove",!1,!1))}}),$(document).off(ns).on("mousemove"+ns+" touchmove"+ns,function(e){const touches=e.originalEvent?.touches;if(isPinching&&touches&&touches.length===2){e.preventDefault(),e.stopPropagation();let newScale=getDistance(touches)/initialDistance*initialScale;newScale=Math.min(Math.max(newScale,1),5),$img.data("z",newScale);let m=$img.data("pan")||{x:0,y:0};if(newScale>1){const imgRect=$img[0].getBoundingClientRect(),$container=$img.closest(".modal-slide"),containerWidth=$container.width(),containerHeight=$container.height(),scaledWidth=imgRect.width/parseFloat($img.data("z")||1)*newScale,scaledHeight=imgRect.height/parseFloat($img.data("z")||1)*newScale,maxPanX=Math.max(0,(scaledWidth-containerWidth)/2),maxPanY=Math.max(0,(scaledHeight-containerHeight)/2);m.x=Math.max(-maxPanX,Math.min(maxPanX,m.x)),m.y=Math.max(-maxPanY,Math.min(maxPanY,m.y)),$img.data("pan",m)}requestAnimationFrame(()=>{$img.css({transform:`scale(${newScale}) translate(${m.x/newScale}px, ${m.y/newScale}px)`,transition:"none","will-change":"transform","-webkit-backface-visibility":"hidden","backface-visibility":"hidden"})});return}if(!isDragging||isPinching)return;e.preventDefault(),e.stopPropagation();const evt=e.type.startsWith("touch")?e.originalEvent.touches[0]:e,dx=evt.clientX-startX,dy=evt.clientY-startY;let nx=imgStartX+dx,ny=imgStartY+dy;const z=parseFloat($img.data("z")||ZOOM_SCALE);if(z>1){const imgRect=$img[0].getBoundingClientRect(),$container=$img.closest(".modal-slide"),containerWidth=$container.width(),containerHeight=$container.height(),scaledWidth=imgRect.width/z*z,scaledHeight=imgRect.height/z*z,maxPanX=Math.max(0,(scaledWidth-containerWidth)/2),maxPanY=Math.max(0,(scaledHeight-containerHeight)/2);nx=Math.max(-maxPanX,Math.min(maxPanX,nx)),ny=Math.max(-maxPanY,Math.min(maxPanY,ny))}$img.data("pan",{x:nx,y:ny}),requestAnimationFrame(()=>{$img.css({transform:`scale(${z}) translate(${nx/z}px, ${ny/z}px)`,"will-change":"transform","-webkit-backface-visibility":"hidden","backface-visibility":"hidden"})})}),$(document).on("mouseup"+ns+" touchend"+ns+" touchcancel"+ns,function(e){const wasPinching=isPinching,wasDragging=isDragging;if(wasPinching&&(isPinching=!1,$img.css({transition:"transform 0.2s ease-out","will-change":""}),setTimeout(()=>{$img.css("transition","")},200),parseFloat($img.data("z")||1)<=1.1&&resetZoomState()),wasDragging&&(isDragging=!1,$("body").removeClass("grabbing"),$img.css("will-change","")),wasPinching||wasDragging){const currentZoom=parseFloat($img.data("z")||1),$slider=$img.closest(".modal-slider");$slider.length&&$slider.hasClass("slick-initialized")&&currentZoom<1.5&&setTimeout(()=>{$slider.slick("slickSetOption","swipe",!0,!1),$slider.slick("slickSetOption","draggable",!0,!1),$slider.slick("slickSetOption","touchMove",!0,!1)},100)}})}function disablePan(){$(document).off(".zoomPan"),$("body").removeClass("grabbing");const $slider=$(".modal-slider");$slider.length&&$slider.hasClass("slick-initialized")&&setTimeout(()=>{$slider.slick("slickSetOption","swipe",!0,!1),$slider.slick("slickSetOption","draggable",!0,!1),$slider.slick("slickSetOption","touchMove",!0,!1)},50)}function closeImageModal(){const $modal=$("#product-image-modal");
28if($modal.is(":visible")){try{modalSlider&&$modal.find(".modal-slider").hasClass("slick-initialized")&&$modal.find(".modal-slider").slick("unslick")}catch{}modalSlider=null,resetZoomState(),$modal.fadeOut(150,()=>{$modal.removeClass("active").attr("aria-hidden","true").attr("inert",""),$("body").removeClass("modal-open")})}}function escapeHtml(str){return String(str||"").replace(/[&<>"']/g,c=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[c])}})(jQuery);
29//# sourceMappingURL=/cdn/shop/t/170/assets/product-zoom.js.map?v=74273620392434418831784135490

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.