<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>放大镜效果</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.content {
display: flex;
justify-content: flex-start;
margin: 0px auto;
margin-top: 100px;
width: 80%;
}
.box {
position: relative;
width: 300px;
height: 400px;
border: 1px solid #888;
}
.mask {
display: none;
position: absolute;
top: 0;
left: 0;
width: 50px;
height: 50px;
background-color: #b5f49a;
opacity: 0.5;
cursor: move;
}
.box img {
width: 100%;
height: 100%;
}
.big {
display: none;
position: relative;
top: 0;
left: 0;
margin-left: 60px;
width: 500px;
height: 500px;
border: 1px solid #888;
overflow: hidden;
}
.img {
position: absolute;
top: 0;
left: 0;
}
</style>
</head>
<body>
<div class="content">
<div class="box">
<img src="../img/jsq.png" alt="原图">
<div class="mask"></div>
</div>
<div class="big">
<img src="../img/jsq.png" alt="无效果" class="img">
</div>
</div>
<script>
let box = document.querySelector('.box');
let mask = document.querySelector('.mask');
let big = document.querySelector('.big');
let img = document.querySelector('.img')
box.addEventListener('mouseover', function () {
mask.style.display = 'block';
big.style.display = 'block';
});
box.addEventListener('mouseout', function () {
mask.style.display = 'none';
big.style.display = 'none';
});
box.addEventListener('mousemove', function (event) {
let x = event.pageX - this.offsetLeft;
let y = event.pageY - this.offsetTop;
let maskX = x - mask.offsetWidth / 2;
let maskY = y - mask.offsetHeight / 2;
let maskWidth = box.offsetWidth - mask.offsetWidth;
let maskHeight = box.offsetHeight - mask.offsetHeight;
if (maskX <= 0) {
maskX = 0;
} else if (maskX >= maskWidth) {
maskX = maskWidth;
}
if (maskY <= 0) {
maskY = 0;
} else if (maskY >= maskHeight) {
maskY = maskHeight;
}
mask.style.left = maskX + 'px';
mask.style.top = maskY + 'px';
let imgWidth = img.offsetWidth - big.offsetWidth;
let imgHeight = img.offsetHeight - big.offsetHeight;
let bigX = maskX * imgWidth / maskWidth;
let bigY = maskY * imgHeight / maskHeight;
img.style.left = (-bigX) + 'px';
img.style.top = (-bigY) + 'px';
});
</script>
</body>
</html>
【前端特效】放大镜效果
于 2025-04-16 11:09:52 首次发布