废话不多说,先看效果图,和上一章节用的是同一个小图片:

这个方法实现的放大有个弊端就是放大倍数设置的过大的话,会带来图片上的模糊.但是图片加载的话要比使用2张图片加载的快很多

插件代码:

  1. ; (function ($) {
  2. $.fn.gysFdj = function (options) {
  3. var defaluts = {
  4. cameraW: 100, //镜头宽度
  5. cameraH: 100, //镜头高度
  6. pointBjColor: "#000", //镜头的背景颜色
  7. pointOpacity: 0.6, //镜头的透明度
  8. zoomPos: 10, //放大框距离源框的位置
  9. zoom: 2//放大倍数
  10. };
  11. options = $.extend(defaluts, options);
  12. var obj = $(this);
  13. obj.addClass("gysFdjOrigin");
  14. var objOriImg=$("img",obj);
  15. var objOriImgW=objOriImg.width();
  16. var objOriImgH=objOriImg.height();
  17. var fdCount = $(".gysFdjOrigin").length;
  18. var fdAttr = "fd"; //属性变量
  19. obj.attr(fdAttr, fdCount); //添加属性
  20. var offset = obj.offset();
  21. var objLeft = offset.left; //对象left
  22. var objTop = offset.top; //对象top
  23. var objWidth = obj.width(); //对象宽度
  24. var objHeight = obj.height(); //对象高度
  25. //镜头相对box的活动范围
  26.  
  27. var cameraMaxLeft = objWidth + objLeft - options.cameraW; //最大左范围
  28. var cameraMaxTop = objHeight + objTop - options.cameraH; //最大下范围
  29.  
  30. var imgStr = obj.html();
  31. var html = "";
  32. html += "<div style='left:" + (objLeft + objWidth + options.zoomPos) + "px; top:" + objTop + "px;display:none; position:absolute;width:" + (options.cameraW * options.zoom) + "px;height:" + (options.cameraH* options.zoom) + "px;overflow:hidden;' class='gysFdjBox' " + fdAttr + "=" + fdCount + ">" + imgStr + "</div>";
  33. $("body").append(html);
  34. $("img", $(".gysFdjBox[" + fdAttr + "=" + fdCount + "]")).width(objWidth*options.zoom).height(objHeight*options.zoom);
  35. var objFdjcamera = null;
  36. if ($("#gysFdjcamera").length == 0) {
  37. var pointBlock = "<div id='gysFdjcamera' style='width:" + options.cameraW + "px; height:" + options.cameraH + "px; background-color:" + options.pointBjColor + ";opacity:" + options.pointOpacity + ";filter:alpha(opacity="+options.pointOpacity*100+");cursor:crosshair;position:absolute;display:none;'></div>";
  38. $("body").append(pointBlock);
  39. }
  40. objFdjcamera = $("#gysFdjcamera");
  41. var nowLeft = 0, nowTop = 0;
  42. obj.on("mouseover", function (event) {
  43. objFdjcamera.show().attr(fdAttr, fdCount);
  44. $(".gysFdjBox["+fdAttr+"="+fdCount+"]").show();
  45. $(document).on("mousemove", function (event) {
  46. var pointX = event.clientX+$(document).scrollLeft();
  47. var pointY = event.clientY+$(document).scrollTop();
  48. nowLeft = pointX - options.cameraW / 2;
  49. nowTop = pointY - options.cameraH / 2;
  50. if (nowLeft <= objLeft) { nowLeft = objLeft; }
  51. else if (nowLeft >= cameraMaxLeft) { nowLeft = cameraMaxLeft; }
  52. if (nowTop <= objTop) { nowTop = objTop; }
  53. else if (nowTop >= cameraMaxTop) { nowTop=cameraMaxTop;}
  54. objFdjcamera.css({ left: nowLeft + "px", top: nowTop + "px" });
  55. nowLeft=(nowLeft-objLeft)*options.zoom;
  56. nowTop=(nowTop-objTop)*options.zoom;
  57. $("img",$(".gysFdjBox[" + fdAttr + "=" + fdCount + "]")).css({ "margin-top": -nowTop + "px", "margin-left": -nowLeft + "px" });
  58. });
  59. });
  60. objFdjcamera.on("mouseleave", function () {
  61. $(document).off("mousemove");
  62. objFdjcamera.hide();
  63. $(".gysFdjBox["+fdAttr+"="+fdCount+"]").hide();
  64. });
  65. }
  66. })(jQuery);

CSS代码:

  1. .test{ width:300px;height:400px; overflow:hidden;}

HTML代码:

  1. <div class="test"><img src="../img/x.jpg" alt="小图"/></div>

插件的调用:

  1. $(function () {
  2. $(".test").gysFdj({ zoom: 2 }); });

自己写的jQuery放大镜插件效果(二)(采用只有一张图片的思路)的更多相关文章

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

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

  2. Jquery放大镜插件---imgzoom.js(原创)

    Jquery放大镜插件imgzoom能够实现图片放大的功能,便于与原图进行比较. 使用方法: 1.引入jQuery与imgzoom,imgzoom.css <link rel="sty ...

  3. jquery放大镜插件与样式

    这是放大镜插件链接,我已经上传到我博客http://files.cnblogs.com/valiant1882331/%E6%94%BE%E5%A4%A7%E9%95%9C%E6%8F%92%E4%B ...

  4. 批发网加盟页面轮播Jquery jcarousellite插件效果

    Jquery jcarousellite 插件的好处 其中: 参数说明: btnPrev     string 上一个按钮的class名, 比如  btnPrev: ".prev" ...

  5. 玉渊潭赏樱花有感:从无到有写一个jQuery开源插件

    “玉渊潭公园樱花节”是每年樱花绽放时,都会在玉渊潭公园樱举办樱花节,游客前往玉渊潭公园,可以欣赏到20个品种2000株樱花.2016玉渊潭樱花节时间:3月中旬-4月中旬观赏最佳,2016年3月23日开 ...

  6. jQuery放大镜插件jqzoom使用

    源码下载,使用指导地址:http://www.mind-projects.it/projects/jqzoom/ 使用教程: 1.导入库文件 <script src="../js/jq ...

  7. jQuery放大镜插件

    (function($) { $.fn.magnifier = function(options){ var options = $.extend({ bigWidth: 400, //大图高度 bi ...

  8. 自己写的jQuery颜色插件

    界面效果: 插件js代码: ;(function ($) { //122种颜色 var aColors = [ "ff0000", "ffff00", &quo ...

  9. Jquery相册插件(开源下载)

    一,导言 上次 “不定义JQuery插件,不要说会JQuery” 的博客写的肤浅,漏洞百出,而且最重要的是从理论上说如何定义一个jQuery插件,没有实质性的写一个jQuery插件出来,这未免是纸上谈 ...

随机推荐

  1. mysql sum(if())用法

    原表:id    fenlei     time1      分类1      201303162      分类2      201303163      分类3      201303174    ...

  2. IOS消息推送(转)

    第一部分 首先第一步当然是介绍一下苹果的推送机制(APNS)咯(ps:其实每一篇教程都有),先来看一张苹果官方对其推送做出解释的概要图. Provider是给你手机应用发出推送消息的服务器,而APNS ...

  3. centos下tomcat启动卡死

    遇到好几次了,总是忘记哪个位置~!!! tomcat启动时查看日志会卡在一个位置很长时间,如下 28-Aug-2018 22:56:55.216 INFO [localhost-startStop-1 ...

  4. OC基础:类和对象 分类: ios学习 OC 2015-06-12 18:55 17人阅读 评论(0) 收藏

    OC:Objective-c     面向对象的c语言,简称obj-c或者OC OC和C的区别 1.OC是C语言的超集,OC是在C语言的基础上结合smalltalk的优点,开发出来的语言.oc兼容所有 ...

  5. C++内存管理的原则

    内存管理原则,就是“谁创建,谁释放”或者说“谁申请,谁释放”. 简单地说,在代码上体现为,调用new或malloc等内存分配的人,同时需在内存使用完成后调用delete或free释放. 这个原则看似大 ...

  6. 通过JS动态创建和删除HTML元素

    <script type="text/javascript" language="Javascript"> function InputOnBlur ...

  7. C高级第三次作业(1)

    6-1 输出月份英文名 1.设计思路: 1.定义一个字符串数组将12个月的英文加进去: 2.判断输入的数是否大于等于1小于等于12: 3.若是 则返还s[n-1]; 4.否则返还NULL: 源代码: ...

  8. liunx中安装包及其应用

    1. dpkg -i <package>  安装包 dpkg -r <package>   删除包 dpkg -P <package> 移除包和配置文件 dpkg ...

  9. FZU OJ 1056 :扫雷游戏

    Problem 1056 扫雷游戏 Accept: 2624    Submit: 6903Time Limit: 1000 mSec    Memory Limit : 32768 KB  Prob ...

  10. ES中Module的使用

    Module 1.ES6在语言标准的层面上,实现了模块功能,成为浏览器和服务器通用的模块解决方案,完全可以取代 CommonJS 和 AMD 规范,基本特点如下: 每一个模块只加载一次, 每一个JS只 ...