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扩展插件Validate 2通过参数设置验证规则
Sep 05 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
Sep 19 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
Jan 02 Javascript
javascript处理表单示例(javascript提交表单)
Apr 28 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
Sep 03 Javascript
JavaScript中Promise的使用详解
Feb 26 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
Apr 22 Javascript
微信小程序获取音频时长与实时获取播放进度问题
Aug 28 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
Feb 22 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
Apr 15 Javascript
vue中的 $slot 获取插槽的节点实例
Nov 12 Javascript
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 Vue.js
解决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世纪万年历
2006/12/06 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
thinkphp分页实现效果
2016/10/13 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
$.each与$().each的区别示例介绍
2014/03/20 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
常见python正则用法的简单实例
2016/06/21 Python
深入理解Python中range和xrange的区别
2017/11/26 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
Python中按值来获取指定的键
2019/03/04 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
使用Django清空数据库并重新生成
2020/04/03 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
如何进行Linux分区优化
2016/09/13 面试题
写自荐信有哪些不宜?
2013/10/17 职场文书
应届毕业生求职信范例分享
2013/12/17 职场文书
阿德的梦教学反思
2014/02/06 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
幼儿园辞职书
2015/02/26 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL