这是JS学习到目前为止做的比较难的一个案例,主要的难点在于鼠标的偏移量与放大镜遮罩层的偏移量以及放大图的偏移量的换算。
效果展示

参考代码
HTML代码
1 2 3 4 5 6 7
| <div class="box"> <img src="../images/bright.jpg" alt="" class="bright"> <div class="mask"></div> <div class="big"> <img src="../images/bright.jpg" alt="" class="bigImg"> </div> </div>
|
CSS代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| .box { position: relative; width: 400px; height: 400px; border: 1px solid #ddd; margin: 20px 0 0 20px; }
.bright { width: 100%; }
.mask { display: none; position: absolute; top: 0; left: 0; width: 300px; height: 300px; background: #b9e4f5; border: 1px solid #ccc; opacity: .5; cursor: move; }
.big { display: none; position: absolute; top: 0; left: 410px; width: 500px; height: 500px; background-color: pink; border: 1px solid #ccc; overflow: hidden; }
.big img { position: absolute; top: 0; left: 0; }
|
JS代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| window.addEventListener('load', function() { var box = document.querySelector('.box'); var mask = document.querySelector('.mask'); var big = document.querySelector('.big'); 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(e) { var x = e.pageX - this.offsetLeft; var y = e.pageY - this.offsetTop; var maskX = x - mask.offsetWidth / 2; var maskY = y - mask.offsetHeight / 2; var maskMaxWidth = box.offsetWidth - mask.offsetWidth; var maskMaxHeight = box.offsetHeight - mask.offsetHeight; if (maskX <= 0) { maskX = 0; } else if (maskX >= maskMaxWidth) { maskX = maskMaxWidth; } if (maskY <= 0) { maskY = 0; } else if (maskY >= maskMaxHeight) { maskY = maskMaxHeight; } mask.style.left = maskX + 'px'; mask.style.top = maskY + 'px';
var bigImg = document.querySelector('.bigImg'); var bigMaxWidth = bigImg.offsetWidth - big.offsetWidth; var bigMaxHeight = bigImg.offsetHeight - big.offsetHeight; var bigX = maskX * bigMaxWidth / maskMaxWidth; var bigY = maskY * bigMaxHeight / maskMaxHeight; bigImg.style.left = -bigX + 'px'; bigImg.style.top = -bigY + 'px'; }) })
|
Author:oCodeHoney
Date:2020-3-9