原生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 相关文章推荐
JQuery 常用操作代码
Mar 14 Javascript
javascript 验证日期的函数
Mar 18 Javascript
javascript获取url上某个参数的方法
Nov 08 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
Nov 14 Javascript
jQuery中animate动画第二次点击事件没反应
May 07 Javascript
学习使用bootstrap的modal和carousel
Dec 09 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
Dec 27 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
Jan 04 Javascript
给vue项目添加ESLint的详细步骤
Sep 29 Javascript
Layui表格监听行单双击事件讲解
Nov 14 Javascript
Json实现传值到后台代码实例
Jun 30 Javascript
JavaScript实现与web通信的方法详解
Aug 07 Javascript
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
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
PHP与以太坊交互详解
2018/08/24 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
基于jquery的无刷新分页技术
2011/06/11 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
JavaScript函数详解
2015/02/27 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
后勤副校长自我鉴定
2013/10/13 职场文书
创业资金计划书
2014/02/06 职场文书
工作态度检讨书
2014/02/11 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
房屋继承公证书
2014/04/10 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫