原生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 concat数组累加 示例
Sep 03 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
Nov 30 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
使用AngularJS 应用访问 Android 手机的图片库
Mar 24 Javascript
jquery右下角自动弹出可关闭的广告层
May 08 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
Dec 31 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
Feb 23 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
May 20 jQuery
extjs简介_动力节点Java学院整理
Jul 17 Javascript
Node调用Java的示例代码
Sep 20 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
Aug 06 Javascript
Vue实现点击当前行变色
Dec 14 Vue.js
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
服务器端解压缩zip的脚本
2006/12/22 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
js玩一玩WSH吧
2007/02/23 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
Vue数据驱动模拟实现2
2017/01/11 Javascript
js+html制作简单验证码
2017/02/16 Javascript
js实现下一页页码效果
2017/03/07 Javascript
vuex 的简单使用
2018/03/22 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
Python 列表list使用介绍
2014/11/30 Python
Python做文本按行去重的实现方法
2016/10/19 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
numpy的Fancy Indexing和array比较详解
2020/06/11 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
马来西亚在线药房:RoyalePharma
2019/12/01 全球购物
介绍一下Linux中的链接
2016/05/28 面试题
自我鉴定写作要点
2014/01/17 职场文书
五年级英语教学反思
2014/01/31 职场文书
《母鸡》教学反思
2014/02/25 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
学校党支部承诺书
2015/04/30 职场文书
岁月神偷观后感
2015/06/11 职场文书
装修安全责任协议书
2016/03/22 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python