JavaScript实现图片放大预览效果


Posted in Javascript onNovember 02, 2020

代码实现:

<!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实现图片放大预览效果

以上就是JavaScript实现图片放大预览效果的详细内容,更多关于JavaScript 图片放大的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
jquery中this的使用说明
Sep 06 Javascript
JavaScript访问样式表代码
Oct 15 Javascript
jQuery性能优化的38个建议
Mar 04 Javascript
JS+CSS实现精美的二级导航效果代码
Sep 17 Javascript
基于jquery实现图片上传本地预览功能
Jan 08 Javascript
AngularJS基础 ng-keyup 指令简单示例
Aug 02 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
Oct 05 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
Jan 17 Javascript
p5.js入门教程之鼠标交互的示例
Mar 16 Javascript
element el-input directive数字进行控制
Oct 11 Javascript
vue实现信息管理系统
May 30 Javascript
vue键盘事件点击事件加native操作
Jul 27 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
Nov 02 #Javascript
在antd4.0中Form使用initialValue操作
Nov 02 #Javascript
vue+iview使用树形控件的具体使用
Nov 02 #Javascript
在antd Form表单中select设置初始值操作
Nov 02 #Javascript
react+antd 递归实现树状目录操作
Nov 02 #Javascript
antd form表单数据回显操作
Nov 02 #Javascript
antd Select下拉菜单动态添加option里的内容操作
Nov 02 #Javascript
You might like
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
php画图实例
2014/11/05 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
python fabric实现远程部署
2017/01/05 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
python 调试冷知识(小结)
2019/11/11 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
实习评语
2013/12/16 职场文书
运动会解说词100字
2014/01/31 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
升学宴演讲稿
2014/09/01 职场文书
建筑横幅标语
2014/10/09 职场文书
python字符串常规操作大全
2021/05/02 Python
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android
基于redis+lua进行限流的方法
2022/07/23 Redis