基于jQuery的放大镜效果

先看一下效果

接下来是核心代码

 
 
 
 
  1. $(function(){  
  2.     var mouseX = 0;        //鼠标移动的位置X  
  3.     var mouseY = 0;        //鼠标移动的位置Y  
  4.     var maxLeft = 0;    //最右边  
  5.     var maxTop = 0;        //最下边  
  6.     var markLeft = 0;    //放大镜移动的左部距离  
  7.     var markTop = 0;    //放大镜移动的顶部距离  
  8.     var perX = 0;    //移动的X百分比  
  9.     var perY = 0;    //移动的Y百分比  
  10.     var bigLeft = 0;    //大图要移动left的距离  
  11.     var bigTop = 0;        //大图要移动top的距离  
  12.  
  13.     //改变放大镜的位置  
  14.     function updataMark($mark){  
  15.         //通过判断,让小框只能在小图区域中移动          
  16.         if(markLeft<0){  
  17.             markLeft = 0;  
  18.         }else if(markLeft>maxLeft){  
  19.             markLeft = maxLeft;  
  20.         }  
  21.           
  22.           
  23.         if(markTop<0){  
  24.             markTop = 0;  
  25.         }else if(markTop>maxTop){  
  26.             markTop = maxTop;  
  27.         }  
  28.           
  29.         //获取放大镜的移动比例,即这个小框在区域中移动的比例  
  30.         perX = markLeft/$(".small").outerWidth();  
  31.         perY = markTop/$(".small").outerHeight();  
  32.           
  33.         bigLeft = -perX*$(".big").outerWidth();  
  34.         bigTop = -perY*$(".big").outerHeight();  
  35.           
  36.         //设定小框的位置  
  37.         $mark.css({"left":markLeft,"top":markTop,"display":"block"});  
  38.     }  
  39.       
  40.     //改变大图的位置  
  41.     function updataBig(){  
  42.         $(".big").css({"display":"block","left":bigLeft,"top":bigTop});  
  43.     }  
  44.       
  45.     //鼠标移出时  
  46.     function cancle(){  
  47.         $(".big").css({"display":"none"});      
  48.         $(".mark").css({"display":"none"});  
  49.     }  
  50.       
  51.     //鼠标小图上移动时  
  52.     function imgMouseMove(event){  
  53.           
  54.         var $this = $(this);  
  55.         var $mark = $(this).children(".mark");  
  56.             
  57.         //鼠标在小图的位置  
  58.         mouseX = event.pageX-$this.offset().left - $mark.outerWidth()/2;  
  59.         mouseY = event.pageY-$this.offset().top - $mark.outerHeight()/2;  
  60.           
  61.         //最大值  
  62.         maxLeft =$this.width()- $mark.outerWidth();  
  63.         maxTop =$this.height()- $mark.outerHeight();  
  64.         markLeft = mouseX;  
  65.         markTop = mouseY;  
  66.           
  67.         updataMark($mark);  
  68.         updataBig();  
  69.     }  
  70.       
  71.       
  72.     $(".small").bind("mousemove",imgMouseMove).bind("mouseleave",cancle);  
  73. }) 

这个里面主要有二点

1.如何大图跟随"放大镜"的位置,同时移动大图?

其实就是用到一个比例关系,当“放大镜”移动多少比例(是比例,不是具体值),大图也同时用这个比例去乘以大图的宽和高,就可以算出大图该移动多少距离了;

2.显示区域和放大镜的关系?

这里的“放大镜”应该和大图的显示区域的比例,应该是大图和小的比例关系一样。比如大图和小图的比例是1:2,那个“放大镜”区域的大小,和显示大图区域的大小比例也应该是1:2,不然“放大镜”罩住的小图区域,和大图的显示区域,所显示的图像信息,不能保持一致。(妙味课堂里讲的那个实例,就是没有保持一至);

在线演示:http://demo.jb51.net/js/2012/mymagnifier/

代码下载:DEMO下载

原文链接:http://www.cnblogs.com/lufy/archive/2012/05/29/2523439.html

【编辑推荐】

  1. jQuery插件之Ajax自动完成
  2. jQuery基本事件代码优化
  3. 印象深刻的jQuery手风琴效果应用
  4. jQuery可多次使用的星级插件
  5. JQuery插件的开发真的有那么难吗

名称栏目:基于jQuery的放大镜效果
文章地址:http://www.shufengxianlan.com/qtweb/news30/343930.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联