全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

原生javascript实现图片放大镜效果

当我们在电商网站上购买商品时,经常会看到这样一种效果,当我们把鼠标放到我们浏览的商品图片上时,会出现类似放大镜一样的一定区域的放大效果,方便消费者观察商品。今天我对这一技术,进行简单实现,实现图片放大镜效果。
我在代码中进行了代码编写的思路的说明和详细的代码注释,方便读者,请看代码:

<html>
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
   *{margin:0px; padding:0px;}
   .small-box {
    width:300px;
    height:300px;
    margin-left:100px;
    margin-top:100px;
    border:1px #ccc solid;
    cursor:move;
    float:left;
    position:relative;
   }
   .small-box img {
    width:300px;
    height:300px;
   }
   .tool {
    width:150px;
    height:150px;
    background-color:gold;
    opacity:0.6;
    filter:alpha(opacity=60);
    position:absolute;
    left:0px;
    top:0px;
    display:none;
   }
   .tool.active {
    display:block;
   }
   .big-box {
    width:300px;
    height:300px;
    border:1px #ccc solid;
    overflow:hidden;
    float:left;
    margin-top:100px;
    position:relative;
    display:none;
   }
   .big-box.active {
    display:block;
   }
   .big-box img {
    width:600px;
    height:600px;
    position:absolute;
   }
  </style>
 </head>
 <body>
  <div class="small-box" id="smallBox">
   <img src="img1.jpg"/>
   <div class="tool" id="tool"></div>
  </div>
  <div class="big-box" id="bigBox">
   <img src="img1.jpg" id="bigImg" />
  </div>
  <script>
   /*
    第一步:当页面加载完后,获取所要操作的节点对象。
    第二步:为smallBox添加一个鼠标浮动事件
       当鼠标浮动到smallBox可视区域的时候,显示出小黄盒子tool
       和右边的大盒子(小黄盒子的放大版)bigBox
       添加active

      为smallBox添加一个鼠标离开事件
       隐藏小黄盒子和右边的大盒子
       去掉active

    第三步:为smallBox添加一个鼠标移动事件
      小黄盒子tool要跟着鼠标的坐标移动
      右边的大盒子里的图片也跟着指定的比例移动
   */
   var smallBox = document.getElementById("smallBox");//小盒子
   var tool = document.getElementById("tool");//小盒子中的黄色区域
   var bigBox = document.getElementById("bigBox");//大盒子
   var bigImg = document.getElementById("bigImg");//放大的图片
   //鼠标进入小盒子区域内,显示黄色区域和大盒子
   smallBox.onmouseenter = function(){
    tool.className = "tool active";
    bigBox.className = "big-box active";
   }
   //鼠标离开小盒子区域,不显示黄色区域和大盒子
   smallBox.onmouseleave = function(){
    tool.className = "tool";
    bigBox.className = "big-box";
   }
   //鼠标在小盒子内移动
   smallBox.onmousemove = function(e){
    var _e = window.event||e;//事件对象
    var x = _e.clientX-this.offsetLeft-tool.offsetWidth/2;//事件对象在小盒子内的横向偏移量
    var y = _e.clientY-this.offsetTop-tool.offsetHeight/2;//竖向偏移量
    if(x<0){
     x = 0;//当左偏移出小盒子时,设为0
    }
    if(y<0){
     y = 0;//当上偏移出小盒子时,设为0
    }
    if(x>this.offsetWidth-tool.offsetWidth){
     x = this.offsetWidth-tool.offsetWidth;//当右偏移出小盒子时,设为小盒子的宽度-黄色放大区域宽度
    }
    if(y>this.offsetHeight-tool.offsetHeight){
     y = this.offsetHeight-tool.offsetHeight;//当下偏移出小盒子时,设为小盒子的高度-黄色放大区域高度
    }
    tool.style.left = x + "px";//黄色放大区域距离小盒子左偏距
    tool.style.top = y + "px";//黄色放大区域距离小盒子上偏距
    bigImg.style.left = -x*2 + "px";//放大图片移动方向相反,偏移距离加倍
    bigImg.style.top = -y*2 + "px";
   }
  </script>
 </body>
</html>

这里,我并没有对代码中css样式,JavaScript行为进行和html结构的分离,方便读者阅读和运行。

有读者可能考虑,获取事件对象的偏移距离时直接使用offsetX和offsetY属性,省去了计算,但是笔者在试验时,出现了异常,黄色放大区域并不能稳定的随着鼠标进行移动,笔者认为,当时用offsetX和offsetY时,执行onmousemove会不断地出发onmouseover,而onmouseover会产生事件传播,从而导致在获取offsetX时出现异常。最终,笔者采用上述代码中的方法,能够出现稳定的效果。读者可以自行运行代码,查看效果。这里附上笔者的效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# js  # 放大镜  # js放大镜放大图片效果  # JavaScript图片放大镜效果代码[代码比较简单]  # JavaScript 图片放大镜(可拖放、缩放效果)  # JavaScript 图片切割效果(放大镜)  # 图片放大镜jquery.jqzoom.js使用实例附放大镜图标  # JS实现图片放大镜效果的方法  # 利用javascript实现的三种图片放大镜效果实例(附源码)  # JavaScript图片放大技术(放大镜)实现代码分享  # JS实现图片放大镜插件详解  # js图片放大镜实例讲解(必看篇)  # js canvas实现放大镜查看图片功能  # JavaScript实现多张图片放大镜效果示例【不限定图片尺寸  # rem单位】  # 鼠标  # 小盒子  # 设为  # 小黄  # 当我们  # 这一  # 我在  # 偏移量  # 我对  # 站上  # 并不能  # 所要  # 要跟  # 当上  # 第二步  # 经常会  # 完后  # 第三步  # 时用  # 上时 


相关文章: 如何彻底卸载建站之星软件?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  网站app免费制作软件,能免费看各大网站视频的手机app?  存储型VPS适合搭建中小型网站吗?  如何解决ASP生成WAP建站中文乱码问题?  高防服务器:AI智能防御DDoS攻击与数据安全保障  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  建站之星安装路径如何正确选择及配置?  如何在搬瓦工VPS快速搭建网站?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  MySQL查询结果复制到新表的方法(更新、插入)  建站之星代理费用多少?最新价格详情介绍  导航网站建站方案与优化指南:一站式高效搭建技巧解析  微信h5制作网站有哪些,免费微信H5页面制作工具?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  金*站制作公司有哪些,金华教育集团官网?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  C++如何使用std::optional?(处理可选值)  如何在IIS服务器上快速部署高效网站?  建站之星导航配置指南:自助建站与SEO优化全解析  linux top下的 minerd 木马清除方法  建站之星如何一键生成手机站?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  c++怎么用jemalloc c++替换默认内存分配器【性能】  清除minerd进程的简单方法  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  如何破解联通资金短缺导致的基站建设难题?  建站上传速度慢?如何优化加速网站加载效率?  建站主机SSH密钥生成步骤及常见问题解答?  如何在Tomcat中配置并部署网站项目?  如何注册花生壳免费域名并搭建个人网站?  建站之星图片链接生成指南:自助建站与智能设计教程  如何通过VPS建站实现广告与增值服务盈利?  如何高效完成独享虚拟主机建站?  制作网站怎么制作,*游戏网站怎么搭建?  定制建站哪家更专业可靠?推荐榜单揭晓  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  如何通过商城自助建站源码实现零基础高效建站?  香港服务器选型指南:免备案配置与高效建站方案解析  建站之星导航如何优化提升用户体验?  html制作网站的步骤有哪些,iapp如何添加网页?  定制建站策划方案_专业建站与网站建设方案一站式指南  设计网站制作公司有哪些,制作网页教程?  如何高效利用亚马逊云主机搭建企业网站?  css网站制作参考文献有哪些,易聊怎么注册?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何在阿里云服务器自主搭建网站?  沈阳制作网站公司排名,沈阳装饰协会官方网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。