原生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 相关文章推荐
extjs 学习笔记(三) 最基本的grid
Oct 15 Javascript
JQuery验证工具类搜集整理
Jan 16 Javascript
JQUERY 设置SELECT选中项代码
Feb 07 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
May 05 Javascript
很棒的Bootstrap选项卡切换效果
Jul 01 Javascript
BootStrapTable服务器分页实例解析
Dec 20 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
May 12 Javascript
JavaScript面向对象精要(下部)
Sep 12 Javascript
浅谈vue中组件绑定事件时是否加.native
Nov 09 Javascript
Vuex的热更替如何实现
Jun 05 Javascript
微信小程序实现转盘抽奖
Sep 21 Javascript
编写v-for循环的技巧汇总
Dec 01 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
重置版宣传动画
2020/04/09 魔兽争霸
php数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
python编程开发之类型转换convert实例分析
2015/11/13 Python
numpy中矩阵合并的实例
2018/06/15 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
查看keras的默认backend实现方式
2020/06/19 Python
python 实现音频叠加的示例
2020/10/29 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
受欢迎的大学生自我评价
2013/12/05 职场文书
大学生村官心得体会范文
2014/01/04 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
房屋维修申请报告
2015/05/18 职场文书
分享提高 Python 代码的可读性的技巧
2022/03/03 Python
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python