原生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 面向对象编程 聊聊对象的事
Sep 17 Javascript
简单实用的js调试logger组件实现代码
Nov 20 Javascript
js 判断checkbox是否选中的实现代码
Nov 23 Javascript
JavaScript学习笔记之Cookie对象
Jan 22 Javascript
javascript中SetInterval与setTimeout的定时器用法
Aug 24 Javascript
Vue.js学习笔记之 helloworld
Aug 14 Javascript
详解Node.js中的事件机制
Sep 22 Javascript
javascript实现的图片预览功能
Mar 25 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
Oct 25 Javascript
vue中img src 动态加载本地json的图片路径写法
Apr 25 Javascript
vue倒计时刷新页面不会从头开始的解决方法
Mar 03 Javascript
JS可断点续传文件上传实现代码解析
Jul 30 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中使用XML
2006/10/09 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
python执行get提交的方法
2015/04/29 Python
深入理解python中的atexit模块
2017/03/07 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
python进行文件对比的方法
2018/12/24 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
在购买印度民族服饰:Soch
2020/09/15 全球购物
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
应届大学生求职的自我评价
2013/11/17 职场文书
市场总经理岗位职责
2014/04/11 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
单位同意报考证明
2015/06/17 职场文书
公司欠款证明
2015/06/24 职场文书
MySQL 如何分析查询性能
2021/05/12 MySQL