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

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

插件代码:

  ; (function ($) {
$.fn.gysFdj = function (options) {
var defaluts = {
cameraW: 100, //镜头宽度
cameraH: 100, //镜头高度
pointBjColor: "#000", //镜头的背景颜色
pointOpacity: 0.6, //镜头的透明度
zoomPos: 10, //放大框距离源框的位置
zoom: 2//放大倍数
};
options = $.extend(defaluts, options);
var obj = $(this);
obj.addClass("gysFdjOrigin");
var objOriImg=$("img",obj);
var objOriImgW=objOriImg.width();
var objOriImgH=objOriImg.height();
var fdCount = $(".gysFdjOrigin").length;
var fdAttr = "fd"; //属性变量
obj.attr(fdAttr, fdCount); //添加属性
var offset = obj.offset();
var objLeft = offset.left; //对象left
var objTop = offset.top; //对象top
var objWidth = obj.width(); //对象宽度
var objHeight = obj.height(); //对象高度
//镜头相对box的活动范围 var cameraMaxLeft = objWidth + objLeft - options.cameraW; //最大左范围
var cameraMaxTop = objHeight + objTop - options.cameraH; //最大下范围 var imgStr = obj.html();
var html = "";
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>";
$("body").append(html);
$("img", $(".gysFdjBox[" + fdAttr + "=" + fdCount + "]")).width(objWidth*options.zoom).height(objHeight*options.zoom);
var objFdjcamera = null;
if ($("#gysFdjcamera").length == 0) {
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>";
$("body").append(pointBlock);
}
objFdjcamera = $("#gysFdjcamera");
var nowLeft = 0, nowTop = 0;
obj.on("mouseover", function (event) {
objFdjcamera.show().attr(fdAttr, fdCount);
$(".gysFdjBox["+fdAttr+"="+fdCount+"]").show();
$(document).on("mousemove", function (event) {
var pointX = event.clientX+$(document).scrollLeft();
var pointY = event.clientY+$(document).scrollTop();
nowLeft = pointX - options.cameraW / 2;
nowTop = pointY - options.cameraH / 2;
if (nowLeft <= objLeft) { nowLeft = objLeft; }
else if (nowLeft >= cameraMaxLeft) { nowLeft = cameraMaxLeft; }
if (nowTop <= objTop) { nowTop = objTop; }
else if (nowTop >= cameraMaxTop) { nowTop=cameraMaxTop;}
objFdjcamera.css({ left: nowLeft + "px", top: nowTop + "px" });
nowLeft=(nowLeft-objLeft)*options.zoom;
nowTop=(nowTop-objTop)*options.zoom;
$("img",$(".gysFdjBox[" + fdAttr + "=" + fdCount + "]")).css({ "margin-top": -nowTop + "px", "margin-left": -nowLeft + "px" });
});
});
objFdjcamera.on("mouseleave", function () {
$(document).off("mousemove");
objFdjcamera.hide();
$(".gysFdjBox["+fdAttr+"="+fdCount+"]").hide();
});
}
})(jQuery);

CSS代码:

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

HTML代码:

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

插件的调用:

 $(function () {
$(".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 聚合函数

    1.sum 用法 有这种类型的数据: id date user_id result 1 2015-05-04 1 win 2 2015-05-06 1 loss 3 2015-05-09 2 loss ...

  2. Linux/Mac OS 个人常用Terminal技巧整理

    刚开始接触linux有些不适应,走了不少弯路,一直没有系统的学过linux应用,基本都是零零散散Google出来的知识,在这里做个整理: Vi/Vim 基本操作: 刚开始接触linux时,不懂vi吃了 ...

  3. 触电(by quqi99)

    高压电线杆相关的触电方式主要是两种: 一是跨步电压,高压电线落在地面时,如果人恰好在这个范围内步行时,就会从一只脚到跨下再到另一只脚到地形成回路,这叫跨步电压.步子越大,电压越大(以落地点为圆心向外电 ...

  4. iOS开发中,如何恢复到某一个版本(Cornerstone)

    Mac上的svn代码管理工具:Cornerstone 如何付恢复某个版本 第一:定位到你的工程,右上角边栏“Working Copy” ---->"Revert" 第二:选择 ...

  5. PyTorch 数据集类 和 数据加载类 的一些尝试

    最近在学习PyTorch,  但是对里面的数据类和数据加载类比较迷糊,可能是封装的太好大部分情况下是不需要有什么自己的操作的,不过偶然遇到一些自己导入的数据时就会遇到一些问题,因此自己对此做了一些小实 ...

  6. chapter02 三种决策树模型:单一决策树、随机森林、GBDT(梯度提升决策树) 预测泰坦尼克号乘客生还情况

    单一标准的决策树:会根每维特征对预测结果的影响程度进行排序,进而决定不同特征从上至下构建分类节点的顺序.Random Forest Classifier:使用相同的训练样本同时搭建多个独立的分类模型, ...

  7. ajax提交post请求出现数组被截断情况的解决方法

    一.场景 php post 提交数据时传的数据时数组,没有多数据进行序列化处理.发现传到服务端时,部分数据丢失,查询了资料发现php对参数个数有限制,限制在php配置文件中(max_input_var ...

  8. B. Beautiful Paintings

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  9. 二进制枚举 + 容斥定理(hdoj 4336 )

    hdoj 4336 http://acm.hdu.edu.cn/showproblem.php?pid=4336 这是一道关于概率与期望的问题,其中   期望 =  1 / 概率 容斥原理  P =  ...

  10. spring boot 热部署devtools实现

    1.devtools spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot ...