原生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动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
Sep 13 Javascript
jquery删除提示框弹出是否删除对话框
Jan 07 Javascript
jQuery对象的selector属性用法实例
Dec 27 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
Jan 12 Javascript
javascript验证手机号和实现星号(*)代替实例
Aug 16 Javascript
JS实现的幻灯片切换显示效果
Sep 07 Javascript
Javascript使用function创建类的两种方法(推荐)
Nov 19 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
Mar 19 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
Aug 31 Javascript
vue 实现根据data中的属性值来设置不同的样式
Aug 04 Javascript
JavaScript实现点击切换功能
Jan 27 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 的几个配置文件函数
2006/12/21 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
简单的React SSR服务器渲染实现
2018/12/11 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
JS实现拖动模糊框特效
2020/08/25 Javascript
Python set集合类型操作总结
2014/11/07 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
python 通过xml获取测试节点和属性的实例
2018/03/31 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
大学生军训自我评价分享
2013/11/09 职场文书
商场中秋节广播稿
2014/01/17 职场文书
小学语文教学反思
2014/02/10 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
退税申请报告怎么写
2015/05/18 职场文书
如何拟写通知正文?
2019/04/02 职场文书
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技