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 相关文章推荐
JavaScript 判断指定字符串是否为有效数字
May 11 Javascript
JavaScript去掉空格的方法集合
Dec 28 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
Sep 12 Javascript
Javascript的各种节点操作实例演示代码
Jun 27 Javascript
javascript图片滑动效果实现
Jan 28 Javascript
JavaScript实现Base64编码转换
Apr 23 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
Nov 02 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
Mar 01 Javascript
JavaScript 中的 this 工作原理
Jun 20 Javascript
JavaScript惰性求值的一种实现方法示例
Jan 11 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
Jun 28 Javascript
一道JS算法面试题——冒泡、选择排序
Apr 21 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
初级的用php写的采集程序
2007/03/16 PHP
实用函数8
2007/11/08 PHP
PHP 上传文件的方法(类)
2009/07/30 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
【消息提示组件】,兼容IE6/7&amp;&amp;FF2
2007/09/04 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
js变量提升深入理解
2016/09/16 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
js编写简单的计时器功能
2017/07/15 Javascript
koa-router源码学习小结
2018/09/07 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
Python之os操作方法(详解)
2017/06/15 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
关于python多重赋值的小问题
2019/04/17 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
使用python绘制二维图形示例
2019/11/22 Python
python脚本后台执行方式
2019/12/21 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
班长岗位职责
2013/11/10 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS