JavaScript实现图片放大预览效果

作者:火星飞鸟 时间:2023-08-23 02:41:17 

代码实现:


<!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>
   .preview-img {
     position: relative;
     height: 398px;
   }

.mask {
     display: none;
     position: absolute;
     top: 0;
     left: 0;
     width: 300px;
     height: 300px;
     background-color: skyblue;
     opacity: .4;
     border: 1px solid #ccc;
     cursor: move;
   }

.big {
     overflow: hidden;
     display: none;
     position: absolute;
     top: 0;
     left: 410px;
     width: 500px;
     height: 500px;
     background-color: pink;
     z-index: 99;
     border: 1px solid #ccc;
   }

.big img {
     position: absolute;
     top: 0;
     left: 0;
   }
 </style>
</head>

<body>
 <script>
   window.addEventListener('load', function() {
     var preview_img = document.querySelector('.preview-img');
     var mask = document.querySelector('.mask');
     var big = document.querySelector('.big');
     // 显示与隐藏
     preview_img.addEventListener('mouseover', function() {
       mask.style.display = 'block';
       big.style.display = 'block';
     });
     preview_img.addEventListener('mouseout', function() {
       mask.style.display = 'none';
       big.style.display = 'none';
     });
     // 盒子跟随鼠标移动
     preview_img.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 maskMax = preview_img.offsetHeight - mask.offsetHeight;
       if (maskX <= 0) {
         maskX = 0;
       } else if (maskX >= maskMax) {
         maskX = maskMax;
       }
       if (maskY <= 0) {
         maskY = 0;
       } else if (maskY >= maskMax) {
         maskY = maskMax;
       }
       mask.style.left = maskX + 'px';
       mask.style.top = maskY + 'px';

// 大图,根据比例计算坐标
       var bigImg = document.querySelector('.bigImg');
       var bigMax = bigImg.offsetWidth - big.offsetWidth;
       var bigX = bigMax * maskX / maskMax;
       var bigY = bigMax * maskY / maskMax;
       bigImg.style.left = -bigX + 'px';
       bigImg.style.top = -bigY + 'px';
     });
   });
 </script>
 <div class="preview-img">
   <img src="https://s1.ax1x.com/2020/10/12/027yRg.jpg" alt="">
   <div class="mask"></div>
   <div class="big">
     <img src="https://s1.ax1x.com/2020/10/12/0276zQ.jpg" alt="" class="bigImg">
   </div>
 </div>
</body>

</html>

实现效果:

JavaScript实现图片放大预览效果

来源:https://www.cnblogs.com/jacklzx/p/13802259.html

标签:JavaScript,图片,放大
0
投稿

猜你喜欢

  • 制作主页的独门功夫五十招

    2010-09-05 21:15:00
  • IIS+PHP添加对webp格式图像的支持配置方法

    2023-05-28 11:20:11
  • asp代码WinHttp.WinHttpRequest.5.1使用例子

    2010-03-11 21:28:00
  • 30个出色的分页设计

    2009-05-12 17:49:00
  • 如何避免SQL语句中含有单引号而导致操作失败?

    2009-11-07 18:40:00
  • Pytorch中的Tensorboard与Transforms搭配使用

    2023-07-09 08:27:05
  • WEB移动应用框架构想

    2010-09-28 16:26:00
  • Javascript 中对中文长度对行判断

    2009-07-05 18:39:00
  • 可以在线创建文件夹吗?

    2009-11-01 18:07:00
  • CSS样式表中SPAN和DIV的区别

    2007-10-21 08:47:00
  • js 混淆加密工具代码

    2007-09-22 18:10:00
  • mysql使用LOAD语句批量录入数据

    2010-03-18 16:19:00
  • jquery常用的表单操作很全很详细

    2011-09-01 19:21:11
  • ASP网站Server object error的解决办法

    2008-11-07 15:57:00
  • 用css实现透视效果

    2009-09-05 16:33:00
  • 如何测试字符串的长度?

    2009-11-11 20:02:00
  • 如何在ASP中使用SQL存储过程

    2008-02-26 12:09:00
  • 定位后无法选择容器内容解决方案

    2008-07-28 13:14:00
  • Shellcode加密解密函数

    2009-04-24 11:18:00
  • asp用正则过滤html标签

    2008-01-19 16:34:00
  • asp之家 网络编程 m.aspxhome.com