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 相关文章推荐
JavaScript的Function详细
Nov 14 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
Jun 29 Javascript
JQuery动态给table添加、删除行 改进版
Jan 19 Javascript
js实现网页自动刷新可制作节日倒计时效果
May 27 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
Jan 02 Javascript
直接拿来用的15个jQuery代码片段
Sep 23 Javascript
使用node+vue.js实现SPA应用
Jan 28 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
Mar 25 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
Jun 23 Javascript
vue.js移动端tab组件的封装实践实例
Jun 30 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
Jul 20 Javascript
javascript中导出与导入实现模块化管理教程
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
新闻分类录入、显示系统
2006/10/09 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
python 实现删除文件或文件夹实例详解
2016/12/04 Python
python放大图片和画方格实现算法
2018/03/30 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
Django 自动生成api接口文档教程
2019/11/19 Python
基于Python爬取爱奇艺资源过程解析
2020/03/02 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
Python tcp传输代码实例解析
2020/03/18 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
高三历史教学反思
2014/01/09 职场文书
幼儿园春游活动方案
2014/01/19 职场文书
狼和鹿教学反思
2014/02/05 职场文书
保护环境建议书
2014/03/12 职场文书
房贷工资证明范本
2015/06/12 职场文书
2016年艾滋病宣传活动总结
2016/04/01 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python