js自制图片放大镜功能


Posted in Javascript onJanuary 24, 2017

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下

注释:
small img size:600x400
big img size:1200x800

原理:
1、大图是小图的 2倍整
2、大图以小图片中心点为中心
      a.transform : translate(-50%,-50%)
      b.(rate-0.5)*50%
      c.clip : rect(t,r,b,l) 以小图边界为边界
3、rect必须有absolute
4、获取鼠标在图片中的位置
     a.获取鼠标位置 XY
     b.获取图片位置、宽度、高度
             i.得到鼠标在图片的百分比位置
             ii.将百分比位置应用于大图 left,top 

问题:
居中理解太差:
          absolute ,left ,top,right,bottom,margin
放大缩小问题:
           起初: transform: scale() 缩放
           利用 transition 过渡
                 结果,采用这种方法会使得鼠标移动时很卡顿
                       可能原因:每次hover 都会触发 transition事件
           解决方法:采用了 Animate 动画来实现缩放 

细节:
以 onmouse 事件 e 动态获得 e.pageX 和 e.pageY
以 $().offset().top /left 获取图片位置
以 $().width() /height() 获取图片宽高
      在错误的操作中也忘了获取 class 的方法
           $().attr("class")
           $().prop("class")
                    event.traget.className 

如果要实现 hover出现 透明的块状就在外部 opacity:0.5; 设置z-index就可以了。

<html>
 <head>
  <meta charset="UTF-8">
  <title>WEBGOD</title>
  <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>
  <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  <script src="js/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
  <style type="text/css">
   #warpper{
    margin: 0 auto;
    padding: 0;
    position: relative;
    z-index: 1;
    width: 600px;
    height: 400px;
   }
   .small{
    text-align: center;
   }
   .big{
    display: none;
    clip: rect(200px,900px,600px,300px);
    position: absolute;
    width: 1200px;
    height: 800px;
    top: 50%;
    left:50%;
    transform: translate(-50%,-50%);
   }
   .big img{
    position: absolute;
    width: 600px;
    height: auto;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    margin: auto;
   }
  </style>
 </head>
 <body>
   
  <div id="warpper">
   <div class="small">
    <img src="img/small_19.jpg"/>
   </div>
   <div class="big">
    <img src="img/img_19.jpg"/>
   </div>
  </div>
  <script type="text/javascript">
   $(function(){
    var x,y,left,top,width,height,imgWidth,imgHeight,rateX,rateY;
    $("#warpper").hover(function(){
     $(".big").css("display","block");
     $(".big img").animate({"width":"1200px"},500);
    },function(){
     $(".big img").animate({"width":"600px"},1);
     $(".big").css("display","none");
    })
    $("#warpper").on("mousemove",function(e){
     x = e.pageX;
     y = e.pageY;
     top = $(".small img").offset().top;
     left = $(".small img").offset().left;
     width = $(".small img").width();
     height = $(".small img").height();
     //
     imgWidth = $(".big img").width();
     imgHeight = $(".big img").height();
     rateX = (left+width-x)/width;
     rateY = (top+height-y)/height;
     if(rateX>0&&rateY>0&&rateX<=1&&rateY<=1){
      $(".big img").css("left",(rateX-0.5)*50+"%");
      $(".big img").css("top",(rateY-0.5)*50+"%");
     }
    })
   })
  </script>
 </body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js利用与或运算符优先级实现if else条件判断表达式
Apr 15 Javascript
jquery EasyUI的formatter格式化函数代码
Jan 12 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
Dec 29 Javascript
利用Angularjs和bootstrap实现购物车功能
Aug 31 Javascript
Angular4学习笔记之准备和环境搭建项目
Aug 01 Javascript
jQuery实现模糊查询的方法分析
May 10 jQuery
javascript中toFixed()四舍五入使用方法详解
Sep 28 Javascript
微信小程序ibeacon三点定位详解
Oct 31 Javascript
35个最好用的Vue开源库(史上最全)
Jan 03 Javascript
bootstrap-table+treegrid实现树形表格
Jul 26 Javascript
vue 实现Web端的定位功能 获取经纬度
Aug 08 Javascript
简单了解JavaScript弹窗实现代码
May 07 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
Jan 24 #Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
Jan 24 #Javascript
JavaScript解析JSON格式数据的方法示例
Jan 24 #Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
Jan 24 #Javascript
Jquery树插件zTree实现菜单树
Jan 24 #Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
Jan 24 #Javascript
树结构之JavaScript
Jan 24 #Javascript
You might like
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
2015/11/30 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
利用npm 安装删除模块的方法
2018/05/15 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
Python中使用dom模块生成XML文件示例
2015/04/05 Python
python开发之字符串string操作方法实例详解
2015/11/12 Python
Python实现的微信好友数据分析功能示例
2018/06/21 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
Python import与from import使用及区别介绍
2018/09/06 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
Java的类与C++的类有什么不同
2014/01/18 面试题
会计核算科岗位职责
2014/03/19 职场文书
质量主管工作职责
2014/09/26 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
go设置多个GOPATH的方式
2021/05/05 Golang
pytorch实现手写数字图片识别
2021/05/20 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python
Python测试框架pytest高阶用法全面详解
2022/06/01 Python