<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
img {
display: block;
}
* {
margin: 0;
padding: 0;
}
.box {
width: 350px;
height: 350px;
margin: 100px;
position: relative;
}
.big {
width: 400px;
height: 400px;
position: absolute;
top: 0;
left: 360px;
overflow: hidden;
display: none;
}
.big img {
position: absolute;
}
.mask {
width: 100px;
height: 100px;
background: rgba(255, 255, 0, 0.4);
position: absolute;
top: 0px;
left: 0px;
cursor: move;
display: none;
}
.small {
position: relative;
}
</style>
</head>
<body>
<div class="box" id="box">
<div class="small" id="small">
<img src="图片地址" width="350" alt="" />
<div class="mask" id="mask"></div>
</div>
<div class="big" id="big">
<img src="图片地址" width="800" alt="" id="img" />
</div>
</div>
</body>
<script>
var boxObj = document.querySelector('#box');
var smallObj = document.getElementById('small');
var imgsmall = smallObj.firstElementChild;
var mackObj = smallObj.lastElementChild;
var bigObj = document.getElementById('big');
var imgbig = bigObj.firstElementChild;
console.log(mackObj);
smallObj.onmouseenter = function () {
mackObj.style.display = 'block';
bigObj.style.display = 'block';
}
smallObj.onmouseleave = () => {
mackObj.style.display = 'none';
bigObj.style.display = 'none';
}
smallObj.onmousemove = (eve) => {
var e = eve || window.event;
let wSx = e.pageX;
let wSy = e.pageY;
let boxLeft = boxObj.offsetLeft;
let boxTop = boxObj.offsetTop;
var maskX = wSx - boxLeft - mackObj.offsetWidth / 2;
var maskY = wSy - boxTop - mackObj.offsetHeight / 2;
if (maskX < 0) {
maskX = 0;
}
if (maskY < 0) {
maskY = 0;
}
var smallObjWx = smallObj.offsetWidth - mackObj.offsetWidth;
var smallObjHx = smallObj.offsetHeight - mackObj.offsetHeight;
if (maskX > smallObjWx) {
maskX = smallObjWx;
}
if (maskY > smallObjHx) {
maskY = smallObjHx;
}
mackObj.style.top = maskY + 'px';
mackObj.style.left = maskX + 'px';
let smeentX = imgbig.offsetWidth - bigObj.offsetWidth;
let smeentY = imgbig.offsetHeight - bigObj.offsetHeight;
let lenterX = maskX / smallObjWx * smeentX;
let lenterY = maskY / smallObjHx * smeentY;
imgbig.style.top = -lenterY + 'px';
imgbig.style.left = -lenterX + 'px';
console.log(lenterX);
}
</script>
</html>