原生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 相关文章推荐
使用TextRange获取输入框中光标的位
Oct 14 Javascript
JS+CSS实现Li列表隔行换色效果的方法
Feb 16 Javascript
javascript删除元素节点removeChild()用法实例
May 26 Javascript
JavaScript中exec函数用法实例分析
Jun 08 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 Javascript
Bootstrap响应式侧边栏改进版
Sep 17 Javascript
为什么要使用Vuex的介绍
Jan 19 Javascript
详解Vue 如何监听Array的变化
Jun 06 Javascript
JavaScript动态添加数据到表单并提交的几种方式
Jun 26 Javascript
微信小程序 wxParse插件显示视频问题
Sep 27 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 Javascript
vue移动端下拉刷新和上滑加载
Oct 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
xajax写的留言本
2006/11/25 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
python学习基础之循环import及import过程
2018/04/22 Python
python模块导入的细节详解
2018/12/10 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
linux面试题参考答案(9)
2015/01/07 面试题
职业教育毕业生求职信
2013/11/09 职场文书
政风行风整改报告
2014/11/06 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS