Mqleet's picture
[update] templates
a3d3755
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'));
});
});
});