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 相关文章推荐
prototype.js的Ajax对象
Sep 23 Javascript
一个简单的Ext.XTemplate的实例代码
Mar 18 Javascript
jquery 删除字符串最后一个字符的方法解析
Feb 11 Javascript
js弹出div并显示遮罩层
Feb 12 Javascript
JavaScript自定义数组排序方法
Feb 12 Javascript
javascript倒计时效果实现
Nov 12 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
Jan 23 Javascript
js控制li的隐藏和显示实例代码
Oct 15 Javascript
webuploader模态框ueditor显示问题解决方法
Dec 27 Javascript
js仿搜狐视频记录片列表展示效果
May 30 Javascript
爬虫利器Puppeteer实战
Jan 09 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
Apr 23 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
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
CI框架数据库查询之join用法分析
2016/05/18 PHP
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
vue+element实现表单校验功能
2019/05/20 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
python 实现插入排序算法
2012/06/05 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
浅谈django框架集成swagger以及自定义参数问题
2020/07/07 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
如何手工释放资源
2013/12/15 面试题
企业面试题试卷附带答案
2015/12/20 面试题
物流管理毕业生自荐信
2013/10/24 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
长江三峡导游词
2015/01/31 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书