js原生淘宝京东宝贝放大镜效果

不念不忘少年蓝@ 2022-01-07 20:17 417阅读 0赞

js实现商城放大镜效果

效果:

  • 鼠标放上去会有半透明遮罩、右边会有大图片局部图。
  • 鼠标移动时右边的大图片也会局部移动。

技术点

Event
Event 是一个事件对象,当一个事件发生后,和当前事件发生相关的详细信息被临时存储到一个指定的地方,也就是event对象,以方便我们在需要的时候调用。

事件捕获定位

`难点``:计算。

**接下来是demo分享:

css部分:

  1. * { margin: 0; padding: 0; } /* img { vertical-align: top; } */ .box { width: 350px; height: 350px; position: relative; border: 1px solid black; margin: 150px 0 0 300px; } .big { width: 450px; height: 450px; position: absolute; border: 1px solid black; left: 400px; top: 0; display: none; overflow: hidden; } .small { position: relative; } .mask { width: 100px; height: 100px; background-color: rgba(255, 255, 0, 0.4); position: absolute; left: 0; top: 0; cursor: move; display: none; } .big img { position: absolute; left: 0; top: 0; }

html结构部分:

  1. <div class="box" id="oBox"> <div class="small" id="oSmall"> <img src="./images/001.jpg" alt=""> <div class="mask" id="oMask"></div> </div> <div class="big" id="oBig"> <img src="./images/0001.jpg" alt=""> </div> </div>
  2. //第一步获取节点
  3. let box = document.getElementById('oBox');
  4. let small = box.children[0]; //获取盒子的第一个子节点samll
  5. let big = box.children[1]; //获取盒子的第二个子节点big
  6. let mask = small.children[1]; //获取小盒子里的遮罩
  7. let bigImg = big.children[0]; //获取大盒子里的图片
  8. //鼠标进入small 遮罩(mask)大盒子(big)display:block
  9. small.onmouseover = function() {
  10. mask.style.display = 'block';
  11. big.style.display = 'block';
  12. };
  13. //鼠标离开small 遮罩(mask)大盒子(big)display:none
  14. small.onmouseout = function() {
  15. mask.style.display = 'none';
  16. big.style.display = 'none';
  17. };
  18. let x = 0;
  19. let y = 0;
  20. small.onmousemove = function(even) {
  21. var even = even || window.event;
  22. // 获取鼠标在small里的坐标
  23. let x = even.clientX - this.offsetParent.offsetLeft - mask.offsetWidth / 2;
  24. let y = even.clientY - this.offsetParent.offsetTop - mask.offsetHeight / 2;
  25. // 限制住鼠标的坐标导致遮罩的位置越界
  26. if (x < 0) {
  27. x = 0;
  28. } else if (x > small.offsetWidth - mask.offsetWidth) {
  29. x = small.offsetWidth - mask.offsetWidth;
  30. }
  31. if (y < 0) {
  32. y = 0;
  33. } else if (y > small.offsetHeight - mask.offsetHeight) {
  34. y = small.offsetHeight - mask.offsetHeight;
  35. }
  36. mask.style.left = x + 'px';
  37. mask.style.top = y + 'px';
  38. //注意大图片的方向
  39. bigImg.style.top = -y * big.offsetHeight / small.offsetHeight + 'px';
  40. bigImg.style.left = -x * big.offsetWidth / small.offsetWidth + 'px';
  41. };

转载于:https://www.cnblogs.com/wangqingjiu/p/10932917.html

发表评论

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

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

相关阅读

    相关 原生js实现放大镜效果

    今天是中秋佳节,在这了我祝大家中秋快乐,心想事成,工作顺利哈! 放大镜效果在电商网站上较为常见的 一个效果,主要针对鼠标在图片选取部分放大查看。效果如图所示 ![...