document.addEventListener('DOMContentLoaded', function() { const zoomableImages = document.querySelectorAll('.zoomable'); const zoomLevel = 2.5; zoomableImages.forEach(img => { let isZooming = false; function startZoom(e) { e.preventDefault(); isZooming = true; zoom(e); img.classList.add('zoomed'); } function endZoom() { isZooming = false; resetZoom(); img.classList.remove('zoomed'); } function zoom(e) { if (!isZooming) return; const rect = img.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; const percentX = x / rect.width; const percentY = y / rect.height; img.style.transformOrigin = `${percentX * 100}% ${percentY * 100}%`; img.style.transform = `scale(${zoomLevel})`; } function resetZoom() { img.style.transformOrigin = 'center center'; img.style.transform = 'none'; } img.addEventListener('mousedown', startZoom); img.addEventListener('mousemove', zoom); img.addEventListener('mouseup', endZoom); img.addEventListener('mouseleave', endZoom); img.addEventListener('dragstart', e => e.preventDefault()); }); document.addEventListener('mouseup', function() { zoomableImages.forEach(img => { img.dispatchEvent(new Event('mouseup')); }); }); });