Objective function
Code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.wrapper {
position: relative;
width: 398px;
height: 398px;
margin: 100px auto;
border: 1px solid #cccccc;
cursor: move;
}
.img {
vertical-align: bottom;
}
.cover {
display: none;
position: absolute;
width: 300px;
height: 300px;
opacity: .6;
background-color: #feeea6;
}
.enlarge {
display: none;
position: absolute;
top: 0;
left: 410px;
width: 500px;
height: 500px;
border: 1px solid #cccccc;
overflow: hidden;
}
.enlarge img {
position: absolute;
}
</style>
</head>
<body>
<div class="wrapper">
<img src="./s3.png" alt="">
<div class="cover"></div>
<div class="enlarge">
<img src="./b3.png" alt="" class="enlarge-img">
</div>
</div>
<script>
var wrapper = document.querySelector('.wrapper');
var cover = document.querySelector('.cover');
var enlarge = document.querySelector('.enlarge');
var enlargeImg = document.querySelector('.enlarge-img');
wrapper.addEventListener('mouseenter', function () {
cover.style.display = 'block';
enlarge.style.display = 'block';
});
wrapper.addEventListener('mouseleave', function () {
cover.style.display = 'none';
enlarge.style.display = 'none';
});
wrapper.addEventListener('mousemove', function (e) {
var x = e.pageX - wrapper.offsetLeft;
var y = e.pageY - wrapper.offsetTop;
var coverX = x - cover.offsetWidth / 2;
var coverY = y - cover.offsetHeight / 2;
var coverXMax = wrapper.offsetWidth - cover.offsetWidth;
var coverYMax = wrapper.offsetHeight - cover.offsetHeight;
if (coverX < 0) {
coverX = 0;
} else if (coverX > coverXMax) {
coverX = coverXMax;
} else {
coverX = coverX;
}
if (coverY < 0) {
coverY = 0;
} else if (coverY > coverYMax) {
coverY = coverYMax;
} else {
coverY = coverY;
}
cover.style.left = coverX + 'px';
cover.style.top = coverY + 'px';
var enlargeImgXMax = enlargeImg.offsetWidth - enlarge.offsetWidth;
var enlargeImgYMax = enlargeImg.offsetHeight - enlarge.offsetHeight;
var enlargeImgX = coverX / coverXMax * enlargeImgXMax;
var enlargeImgY = coverY / coverYMax * enlargeImgYMax;
enlargeImg.style.left = -enlargeImgX + 'px';
enlargeImg.style.top = -enlargeImgY + 'px';
});
</script>
</body>
</html>