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 UI的tooltip函数修饰title属性的气泡悬浮框
Jun 24 Javascript
如何动态的导入js文件具体该怎么实现
Jan 14 Javascript
js图片延迟技术一般的思路与示例
Mar 20 Javascript
面向切面编程(AOP)的理解
May 01 Javascript
jQuery soColorPacker 网页拾色器
Jun 22 Javascript
jquery对Json的各种遍历方法总结(必看篇)
Sep 29 Javascript
微信小程序 购物车简单实例
Oct 24 Javascript
javascript基本数据类型及类型检测常用方法小结
Dec 14 Javascript
bootstrap输入框组使用方法
Feb 07 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
Mar 13 Javascript
jQuery实现图片简单轮播功能示例
Aug 13 jQuery
如何使用 vue + d3 画一棵树
Dec 03 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购物车实现代码
2011/10/10 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
php页码形式分页函数支持静态化地址及ajax分页
2014/03/28 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
Convert Seconds To Hours
2007/06/16 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
javascript自执行函数
2017/02/10 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
Vue.use源码分析
2017/04/22 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
vue 虚拟DOM的原理
2020/10/03 Javascript
Python赋值语句后逗号的作用分析
2015/06/08 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
python队列原理及实现方法示例
2019/11/27 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
python为什么会环境变量设置不成功
2020/06/23 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
国际政治个人自荐信范文
2013/11/26 职场文书
医院总经理职责
2013/12/26 职场文书
三年大学自我鉴定
2014/01/16 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
pandas中关于apply+lambda的应用
2022/02/28 Python
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript