js 仿京东放大镜

£神魔★判官ぃ 2021-08-13 11:41 531阅读 0赞

功能模块

  1. 整个案例可以分为三个功能模块
  2. 鼠标经过小图片盒子, 黄色的遮挡层 和 大图片盒子显示,离开隐藏2个盒子功能
  3. 黄色的遮挡层跟随鼠标功能。
  4. 移动黄色遮挡层,大图片跟随移动功能。

案例分析

  1. 黄色的遮挡层跟随鼠标功能。
  2. 把鼠标坐标给遮挡层不合适。因为遮挡层坐标以父盒子为准。
  3. 首先是获得鼠标在盒子的坐标。
  4. 之后把数值给遮挡层做为left 和top值。
  5. 此时用到鼠标移动事件,但是还是在小图片盒子内移动。
  6. 发现,遮挡层位置不对,需要再减去盒子自身高度和宽度的一半。
  7. 遮挡层不能超出小图片盒子范围。
  8. 如果小于零,就把坐标设置为0
  9. 如果大于遮挡层最大的移动距离,就把坐标设置为最大的移动距离
  10. 遮挡层的最大移动距离:小图片盒子宽度 减去 遮挡层盒子宽度

html代码

  1. <div class="preview_img">
  2. <img src="upload/s3.png" alt="">
  3. <!--遮挡层:定位-->
  4. <div class="mask"></div>
  5. <!--大盒子定位-->
  6. <div class="big">
  7. <img src="upload/big.jpg" alt="" class="bigImg">
  8. </div>
  9. </div>

js代码

  1. window.addEventListener('load', function() {
  2. var preview_img = document.querySelector('.preview_img');
  3. var mask = document.querySelector('.mask');
  4. var big = document.querySelector('.big');
  5. // 1. 当我们鼠标经过 preview_img 就显示和隐藏 mask 遮挡层 和 big 大盒子
  6. preview_img.addEventListener('mouseover', function() {
  7. mask.style.display = 'block';
  8. big.style.display = 'block';
  9. })
  10. preview_img.addEventListener('mouseout', function() {
  11. mask.style.display = 'none';
  12. big.style.display = 'none';
  13. })
  14. // 2. 鼠标移动的时候,让黄色的盒子跟着鼠标来走
  15. preview_img.addEventListener('mousemove', function(e) {
  16. // (1). 先计算出鼠标在盒子内的坐标
  17. var x = e.pageX - this.offsetLeft;
  18. var y = e.pageY - this.offsetTop;
  19. // console.log(x, y);
  20. // (2) 减去盒子高度 300的一半 是 150 就是我们mask 的最终 left 和top值了
  21. // (3) 我们mask 移动的距离
  22. var maskX = x - mask.offsetWidth / 2;
  23. var maskY = y - mask.offsetHeight / 2;
  24. // (4) 如果x 坐标小于了0 就让他停在0 的位置
  25. // 遮挡层的最大移动距离
  26. var maskMax = preview_img.offsetWidth - mask.offsetWidth;
  27. if (maskX <= 0) {
  28. maskX = 0;
  29. } else if (maskX >= maskMax) {
  30. maskX = maskMax;
  31. }
  32. if (maskY <= 0) {
  33. maskY = 0;
  34. } else if (maskY >= maskMax) {
  35. maskY = maskMax;
  36. }
  37. mask.style.left = maskX + 'px';
  38. mask.style.top = maskY + 'px';
  39. // 3. 大图片的移动距离 = 遮挡层移动距离 * 大图片最大移动距离 / 遮挡层的最大移动距离
  40. // 大图
  41. var bigIMg = document.querySelector('.bigImg');
  42. // 大图片最大移动距离
  43. var bigMax = bigIMg.offsetWidth - big.offsetWidth;
  44. // 大图片的移动距离 X Y
  45. var bigX = maskX * bigMax / maskMax;
  46. var bigY = maskY * bigMax / maskMax;
  47. bigIMg.style.left = -bigX + 'px';
  48. bigIMg.style.top = -bigY + 'px';
  49. })
  50. })

发表评论

表情:
评论列表 (有 0 条评论,531人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js 仿京东放大镜

    功能模块 1. 整个案例可以分为三个功能模块 2. 鼠标经过小图片盒子, 黄色的遮挡层 和 大图片盒子显示,离开隐藏2个盒子功能 3. 黄色的遮挡层跟随鼠标功能。 4.