原生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 相关文章推荐
Jquery 滑入滑出效果实现代码
Mar 27 Javascript
通过上下左右键和回车键切换光标实现代码
Mar 08 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
Apr 08 Javascript
javascript自然分类法算法实现代码
Oct 11 Javascript
jQuery绑定事件的几种实现方式
May 09 Javascript
JS对HTML表格进行增删改操作
Aug 22 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
Dec 09 Javascript
详解VueJS应用中管理用户权限
Feb 02 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
Sep 23 Javascript
WEB前端性能优化的7大手段详解
Feb 04 Javascript
原生JS实现微信通讯录
Jun 18 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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
基于python实现高速视频传输程序
2019/05/05 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
python实现简单的购物程序代码实例
2020/03/03 Python
python regex库实例用法总结
2021/01/03 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
node中使用shell脚本的方法步骤
2021/03/23 Javascript
信息管理专业学生自荐信格式
2013/09/22 职场文书
学生自我鉴定模板
2013/12/30 职场文书
中学生期末评语
2014/02/03 职场文书
国庆节标语大全
2014/10/08 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android