原生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 相关文章推荐
javascript Base类 包含基本的方法
Jul 22 Javascript
使用JavaScript构建JSON格式字符串实现步骤
Mar 22 Javascript
js 实现的可折叠留言板(附源码下载)
Jul 01 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
Aug 05 Javascript
AngularJS实现网站换肤实例
Feb 19 Javascript
jsonp跨域请求详解
Jul 13 Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 Javascript
浅谈如何使用webpack构建多页面应用
May 30 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
Sep 04 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
Sep 29 Javascript
详解vue 自定义marquee无缝滚动组件
Apr 09 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
Jan 20 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
php中static静态变量的使用方法详解
2010/06/04 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
表单内同名元素的控制
2006/11/22 Javascript
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
JS与框架页的操作代码
2010/01/17 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
layui select获取自定义属性方法
2018/08/15 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
python daemon守护进程实现
2016/08/27 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
python3.x实现发送邮件功能
2018/05/22 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
python设置环境变量的作用和实例
2019/07/09 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
Python排序函数的使用方法详解
2020/12/11 Python
Python try except finally资源回收的实现
2021/01/25 Python
实习医生自我评价
2013/09/22 职场文书
社会实践心得体会
2014/01/03 职场文书
聚美优品励志广告词
2014/03/14 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
七一表彰大会简报
2015/07/20 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
干货分享:推荐信写作技巧!
2019/06/21 职场文书