前端学习|仿京东放大镜案例

【前端学习|仿京东放大镜案例】运行结果
前端学习|仿京东放大镜案例
文章图片

京东放大镜 - 锐客网
前端学习|仿京东放大镜案例
文章图片
前端学习|仿京东放大镜案例
文章图片
> window.addEventListener('load', function() { var box = document.querySelector('.box'); var mask = document.querySelector('.mask'); var big = document.querySelector('.big'); // 鼠标进入事件 box.addEventListener('mouseover', function(e) { 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) { // 确认mask 的位置 var x = e.pageX - this.offsetLeft - mask.offsetWidth / 2; var y = e.pageY - this.offsetTop - mask.offsetHeight / 2; // 最大偏移值,即大盒子-放大镜层 var maskMax = box.offsetWidth - mask.offsetWidth; // 超出偏移量,强制修改 if (x <= 0) x = 0; if (x >= maskMax) x = maskMax; if (y <= 0) y = 0; if (y >= maskMax) y = maskMax; // 修改放大镜层的位置 mask.style.left = x + 'px'; mask.style.top = y + 'px'; // 计算大图的最大距离 var bigImg = document.querySelector('.bigImg'); var bigMax = bigImg.offsetWidth - big.offsetWidth; // 两最大距离的商,即放大的倍数 var boom = bigMax / maskMax; var bigX = x * boom; var bigY = y * boom; // 修改大图在盒子中的定位 bigImg.style.left = -bigX + 'px'; bigImg.style.top = -bigY + 'px'; }); }); > * { padding: 0; margin: 0; }.box { position: relative; width: 400px; height: 400px; margin: 50px 0 0 100px; border: 1px solid #000000; cursor: move; }.box img { width: 100%; height: 100%; }.mask { display: none; position: absolute; width: 300px; height: 300px; top: 0px; left: 0px; border: 1px solid #ccc; background: yellow; opacity: .5; }.big { display: none; position: absolute; width: 600px; height: 600px; top: -1px; left: 411px; border: 1px solid #000000; overflow: hidden; }.big img { position: absolute; width: 800px; height: 800px; left: 0px; top: 0px; }

    推荐阅读