原生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 相关文章推荐
js中的scroll和offset 使用比较的实例与分析
Sep 29 Javascript
jQuery实现视频作为全屏幕背景
Dec 18 Javascript
JavaScript插件化开发教程 (二)
Jan 27 Javascript
js小数运算出现多位小数如何解决
Oct 08 Javascript
Bootstrap前端开发案例一
Jun 17 Javascript
Node.js中常规的文件操作总结
Oct 13 Javascript
angular实现form验证实例代码
Jan 17 Javascript
vue中锚点的三种方法
Jul 06 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
Sep 20 Javascript
基于Vue-cli快速搭建项目的完整步骤
Nov 03 Javascript
如何优雅地在Node应用中进行错误异常处理
Nov 25 Javascript
加速vue组件渲染之性能优化
Apr 09 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性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
2015/07/09 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
javascript验证手机号和实现星号(*)代替实例
2016/08/16 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
Python使用django搭建web开发环境
2017/06/09 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
Python关于反射的实例代码分享
2020/02/20 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
财务人员个人求职信范文
2013/12/04 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
陈欧的广告词
2014/03/18 职场文书
公司活动总结怎么写
2014/06/25 职场文书
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
详解Python函数print用法
2021/06/18 Python
新手入门Mysql--sql执行过程
2021/06/20 MySQL
Python实现排序方法常见的四种
2021/07/15 Python