<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF - 8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>图片放大镜效果</title>
<style>
.magnifier-container {
position: relative;
display: inline-block;
}
.main-image {
display: block;
width: 300px;
height: auto;
}
.magnifier {
position: absolute;
width: 150px;
height: 150px;
border: 1px solid #000;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.5);
pointer-events: none;
display: none;
}
.zoom-image {
position: absolute;
left: 100%;
top: 0;
width: 300px;
height: auto;
display: none;
transform: scale(3);
transform-origin: top left;
}
</style>
</head>
<body>
<div class="magnifier-container">
<img src="./static/300 1.webp" alt="示例图片" class="main-image">
<div class="magnifier"></div>
<img src="./static/300 1.webp" alt="放大图片" class="zoom-image">
</div>
<script>
const magnifierContainer = document.querySelector('.magnifier-container');
const mainImage = document.querySelector('.main-image');
const magnifier = document.querySelector('.magnifier');
const zoomImage = document.querySelector('.zoom-image');
magnifierContainer.addEventListener('mousemove', function (e) {
const rect = mainImage.getBoundingClientRect();
const x = e.clientX - rect.left;
const y = e.clientY - rect.top;
if (x >= 0 && x <= mainImage.width && y >= 0 && y <= mainImage.height) {
magnifier.style.display = 'block';
zoomImage.style.display = 'block';
magnifier.style.left = x - magnifier.offsetWidth / 2 + 'px';
magnifier.style.top = y - magnifier.offsetHeight / 2 + 'px';
const bgX = -(x * zoomImage.offsetWidth / mainImage.width - magnifier.offsetWidth / 2) + 'px';
const bgY = -(y * zoomImage.offsetHeight / mainImage.height - magnifier.offsetHeight / 2) + 'px';
zoomImage.style.backgroundPosition = bgX + ' ' + bgY;
} else {
magnifier.style.display = 'none';
zoomImage.style.display = 'none';
}
});
</script>
</body>
</html>
屏幕录制 2025-02-17 124845