原生js实现放大镜


Posted in Javascript onFebruary 20, 2017

原理:左边阴影在左边图片上从左到右移动的时候,右边大框也在右边大图片上从左到右移动(尽管在视觉、原理和代码上是相反的);所谓放大,其实就是一张原本就很小的图对应一张原本就很大的图。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
  <style>
    *{
      margin:0;
      padding:0;
    }
    .small{
      width: 400px;
      height: 400px;
      position: relative;
      background: url(http://www.qdfuns.com/misc.php?mod=attach&genre=editor&aid=7dca2c442134be6a652e087296c8ac80) no-repeat center;
      border: 1px solid #ccc;
    }
    .small .inner{
      width: 100px;
      height: 100px;
      background: yellow;
      opacity: 0.5;
      filter: alpha(opacity=50);
      position: absolute;
      left:0;
      top:0;
      display: none;
    }
    .big{
      width: 400px;
      height: 400px;
      position: absolute;
      left:410px;
      top:0;
      overflow: hidden;
      border: 1px solid #ccc;
      display: none;
    }
    .big img{
      width: 200%;
      height: 200%;
      position: absolute;
      left:0;
      top:0;
    }
  </style>
</head>
<body>
<div id="small" class="small">
  <div class="inner"></div>
</div>
<div id="big" class="big">
  <img src="http://www.qdfuns.com/misc.php?mod=attach&genre=editor&aid=d7dec5aeff022ea80c47eb76dc5838d8" alt=""/>
</div>
<script>
  var small=document.getElementById('small');
  var inner=small.getElementsByTagName('div')[0];
  var big=document.getElementById('big');
  var img=big.getElementsByTagName('img')[0];
  //当鼠标移入small的时候,inner和big显示
  small.onmouseover=function(){
    big.style.display='block';
    inner.style.display='block';
  };
  //当鼠标在small移动的时候:1)鼠标在inner的中间 2)inner跟随鼠标移动
  small.onmousemove=function(e){
    e=e||window.event;
    var left=e.clientX-this.offsetLeft-inner.offsetWidth/2;
    var top=e.clientY-this.offsetTop-inner.offsetHeight/2;
    if(left<=0){
      left=0;
    }else if(left>=this.offsetWidth-inner.offsetWidth){
      left=this.offsetWidth-inner.offsetWidth
    }
    if(top<=0){
      top=0;
    }else if(top>=this.offsetHeight-inner.offsetHeight){
      top=this.offsetHeight-inner.offsetHeight
    }
    inner.style.left= left+'px';
    inner.style.top= top+'px';
    //当inner移动的时候,大图跟着一起移动,并且,大图和inner移动的方向相反;
    //或者理解为:左边阴影在图片上从左到右移动的时候,右边大框也在大图片上从左到右移动(尽管视觉上是相反的)。
    img.style.left=left/(small.offsetWidth-inner.offsetWidth)*(big.offsetWidth-img.offsetWidth)+'px';
    img.style.top=top/(small.offsetHeight-inner.offsetHeight)*(big.offsetHeight-img.offsetHeight)+'px';
  };
  //当鼠标移出的时候,inner和big隐藏;
  small.onmouseout=function(){
    big.style.display='none';
    inner.style.display='none';
  }
</script>
</body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
写入cookie的JavaScript代码库 cookieLibrary.js
Oct 24 Javascript
jQuery 追加元素的方法如append、prepend、before
Jan 16 Javascript
jquery中post方法用法实例
Oct 21 Javascript
node.js中的events.emitter.removeListener方法使用说明
Dec 10 Javascript
PHPExcel中的一些常用方法汇总
Jan 23 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
Jun 20 Javascript
微信小程序动态添加分享数据
Jun 14 Javascript
vue2.0全局组件之pdf详解
Jun 26 Javascript
浅谈express 中间件机制及实现原理
Aug 31 Javascript
教你如何用node连接redis的示例代码
Jul 12 Javascript
JS实现可用滑块滑动的缓动图代码
Sep 01 Javascript
Jquery使用each函数实现遍历及数组处理
Jul 14 jQuery
jQuery实现单击按钮遮罩弹出对话框效果(2)
Feb 20 #Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
Feb 20 #Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
Feb 20 #Javascript
原生node.js案例--前后台交互
Feb 20 #Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
Feb 20 #Javascript
jQuery实现链接的title快速出现的方法
Feb 20 #Javascript
Angular企业级开发——MVC之控制器详解
Feb 20 #Javascript
You might like
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
Smarty缓存机制实例详解【三种缓存方式】
2019/07/20 PHP
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
详解vue中组件参数
2018/07/09 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
python决策树之C4.5算法详解
2017/12/20 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
Pytorch之contiguous的用法
2019/12/31 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
2020/06/18 Python
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
违反课堂纪律检讨书
2014/01/19 职场文书
国培教师自我鉴定
2014/02/12 职场文书
大学生秋游活动方案
2014/02/17 职场文书
小学教师寄语大全
2014/04/03 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
租车协议书
2015/01/27 职场文书
综合测评自我评价
2015/03/06 职场文书
财务出纳岗位职责
2015/03/31 职场文书
行政二审代理词
2015/05/25 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
Nginx反向代理学习实例教程
2021/10/24 Servers
Python语言内置数据类型
2022/02/24 Python