自己写的jQuery放大镜插件效果(采用一张大图和一张小图片的思路)

这个思路的方法会带来一个小问题,就是当鼠标放到小图上去时,会开始加载大图片,网速不佳的时候,会出现加载慢的情况.但是放大的效果和你所给出的大图片的清晰度是一样的.

先看效果图:

html代码:

1 <div class="test"><!--整个放大效果的最外区域.-->
2     <div class="testOri"><img  width="400px" height="250px" src="../img/small.jpg"  alt="原图"/></div><!--原始区域,为了更好地兼容各种浏览器,请将图片的宽和高注明-->
3     <div class="testZoom"><img width="1440px" height="900px" src="../img/big.jpg"  alt="放大图"/></div><!--放大区域,为了更好地兼容各种浏览器,请将图片的宽和高注明-->
4 </div>

js插件代码:

 1  ; (function ($) {
 2             $.fn.gysFdj = function (options) {
 3                 var defaults = {
 4                     cameraW: 100, //镜头宽度
 5                     cameraH: 100, //镜头高度
 6                     cameraBjColor: "#000", //镜头背景色
 7                     zoomIndex: 10, //放大框div的层级
 8                     cameraOpacity: 0.6, //镜头透明度
 9                     zoomPos: 10, //放大框距离源框的位置
10                     cameraIndex: 10//镜头的层级
11                 }
12                 var opt = $.extend({}, defaults, options); //合并参数          
13 
14                 if (!opt.ori) { alert("你没有指定源图框"); return; }
15                 if (!opt.zoom) { alert("你没有指定放大框"); return; }
16                 var obj = $(this); //当前最大框对象
17                 if(obj.css("position")=="static"){obj.css("position","relative");}
18                 var objOriDiv = $(opt.ori, obj); //源div 
19                 var objOriDivOffset = objOriDiv.offset();
20                 var objOriDivLeft = objOriDivOffset.left; //源框的left
21                 var objOriDivTop = objOriDivOffset.top; //源框的top
22                 var objZoomDiv = $(opt.zoom, obj); //放大的div框
23                 var objOriImg = $("img", objOriDiv); //源图框               
24                 var objZoomImg = $("img", objZoomDiv); //放大框
25                 var objOriImgW = objOriImg.width();
26                 var objOriImgH = objOriImg.height();
27                 objOriDiv.width(objOriImgW).height(objOriImgH);
28                 obj.width(objOriImgW).height(objOriImgH);
29 
30                 var objOriDivW = objOriDiv.width();
31                 var objOriDivH = objOriDiv.height();
32                 var cameraMaxLeft = objOriDivW - opt.cameraW; //镜头的最大left
33                 var cameraMaxTop = objOriDivH - opt.cameraH; //镜头的做大top
34 
35                 var cameraCSs = { width: opt.cameraW, height: opt.cameraH, "background-color": opt.cameraBjColor, opacity: opt.cameraOpacity, filter: "alpha(opacity="   opt.cameraOpacity * 100   ")", "position": "absolute", display: "none",cursor: "crosshair", "z-index": opt.cameraIndex }; //镜头css               
36                 obj.append("<div class='camera'></div>"); //填充镜头
37                 var objCamera = $(".camera", obj);
38                 objCamera.css(cameraCSs); //添加样式                
39                 
40                 var zoom = objZoomImg.width() / objOriImgW; //放大倍数
41                 objZoomDiv.width(opt.cameraW * zoom).height(opt.cameraH * zoom).css({ position: "absolute", left: (objOriDivW   opt.zoomPos)   "px", top: "0px", overflow: "hidden", "z-index": opt.zoomIndex, display: "none" }); //设置放大的div框
42 
43                 var nowLeft = 0, nowTop = 0;
44                 objOriDiv.on("mouseover", function () {
45                     objCamera.show(); //显示镜头,
46                     objZoomDiv.show(); //显示放大框 
47                     $(document).on("mousemove", function (e) {
48                         nowLeft = e.clientX - objOriDivLeft - opt.cameraW / 2  $(document).scrollLeft();
49                         nowTop = e.clientY-objOriDivTop - opt.cameraH / 2   $(document).scrollTop();
50                         if (nowLeft <= 0)   nowLeft = 0;                       
51                         else if (nowLeft >= cameraMaxLeft)   nowLeft = cameraMaxLeft;
52                         
53                         if (nowTop <= 0) nowTop = 0;
54                         else if (nowTop >= cameraMaxTop)  nowTop = cameraMaxTop;
55 
56                         objCamera.css({ left: nowLeft   "px", top: nowTop   "px" }); //镜头的移动
57 
58                         nowLeft = nowLeft * zoom;
59                         nowTop = nowTop * zoom;
60 
61                         objZoomImg.css({ "margin-left": -nowLeft   "px", "margin-top": -nowTop   "px" });
62                     });
63                 });
64 
65                 objCamera.on("mouseout", function (e) {
66                     $(this).hide();
67                     $(document).off("mousemove");
68                     $(opt.zoom, obj).hide();
69                 });
70             }
71         })(jQuery);

插件的调用:

1  $(function () {
2             $(".test").gysFdj({ ori: ".testOri", zoom: ".testZoom"});                      
3         });

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值