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 相关文章推荐
css图片自适应大小
Nov 28 Javascript
jquery等宽输出文字插件使用介绍
Sep 18 Javascript
初识Node.js
Mar 20 Javascript
详解JavaScript中数组的相关知识
Jul 29 Javascript
jquery实现清新实用的网页菜单效果
Aug 28 Javascript
使用canvas实现仿新浪微博头像截取上传功能
Sep 02 Javascript
JQuery导航菜单选择特效
Apr 11 Javascript
VueJS组件之间通过props交互及验证的方式
Sep 04 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
Feb 12 jQuery
js实现简单的秒表
Jan 16 Javascript
js校验开始时间和结束时间
May 26 Javascript
解决Vue大括号字符换行踩的坑
Nov 09 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
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
php5.3 注意事项说明
2013/07/01 PHP
php把session写入数据库示例
2014/02/26 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
详解vue 命名视图
2019/08/14 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
简单谈谈python中的多进程
2016/11/06 Python
Python实现ping指定IP的示例
2018/06/04 Python
Python中正则表达式的用法总结
2019/02/22 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
使用python实现kNN分类算法
2019/10/16 Python
python 消费 kafka 数据教程
2019/12/21 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
英国著名的小众美容品牌网站:Alyaka
2017/08/08 全球购物
家庭户外服装:Hawkshead
2017/11/02 全球购物
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
银行领导证婚词
2014/01/11 职场文书
大学生学习自我评价
2014/01/13 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
党员民主评议总结
2014/10/20 职场文书
普通党员个人整改措施
2014/10/27 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
2014年科研工作总结
2014/12/03 职场文书
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技