自己写的jQuery放大镜插件效果(一)(采用一张大图和一张小图片的思路)
这个思路的方法会带来一个小问题,就是当鼠标放到小图上去时,会开始加载大图片,网速不佳的时候,会出现加载慢的情况.但是放大的效果和你所给出的大图片的清晰度是一样的.
先看效果图:

html代码:
<div class="test"><!--整个放大效果的最外区域.-->
<div class="testOri"><img width="400px" height="250px" src="../img/small.jpg" alt="原图"/></div><!--原始区域,为了更好地兼容各种浏览器,请将图片的宽和高注明-->
<div class="testZoom"><img width="1440px" height="900px" src="../img/big.jpg" alt="放大图"/></div><!--放大区域,为了更好地兼容各种浏览器,请将图片的宽和高注明-->
</div>
js插件代码:
; (function ($) {
$.fn.gysFdj = function (options) {
var defaults = {
cameraW: 100, //镜头宽度
cameraH: 100, //镜头高度
cameraBjColor: "#000", //镜头背景色
zoomIndex: 10, //放大框div的层级
cameraOpacity: 0.6, //镜头透明度
zoomPos: 10, //放大框距离源框的位置
cameraIndex: 10//镜头的层级
}
var opt = $.extend({}, defaults, options); //合并参数
if (!opt.ori) { alert("你没有指定源图框"); return; }
if (!opt.zoom) { alert("你没有指定放大框"); return; }
var obj = $(this); //当前最大框对象
if(obj.css("position")=="static"){obj.css("position","relative");}
var objOriDiv = $(opt.ori, obj); //源div
var objOriDivOffset = objOriDiv.offset();
var objOriDivLeft = objOriDivOffset.left; //源框的left
var objOriDivTop = objOriDivOffset.top; //源框的top
var objZoomDiv = $(opt.zoom, obj); //放大的div框
var objOriImg = $("img", objOriDiv); //源图框
var objZoomImg = $("img", objZoomDiv); //放大框
var objOriImgW = objOriImg.width();
var objOriImgH = objOriImg.height();
objOriDiv.width(objOriImgW).height(objOriImgH);
obj.width(objOriImgW).height(objOriImgH);
var objOriDivW = objOriDiv.width();
var objOriDivH = objOriDiv.height();
var cameraMaxLeft = objOriDivW - opt.cameraW; //镜头的最大left
var cameraMaxTop = objOriDivH - opt.cameraH; //镜头的做大top
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
obj.append("<div class='camera'></div>"); //填充镜头
var objCamera = $(".camera", obj);
objCamera.css(cameraCSs); //添加样式
var zoom = objZoomImg.width() / objOriImgW; //放大倍数
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框
var nowLeft = 0, nowTop = 0;
objOriDiv.on("mouseover", function () {
objCamera.show(); //显示镜头,
objZoomDiv.show(); //显示放大框
$(document).on("mousemove", function (e) {
nowLeft = e.clientX - objOriDivLeft - opt.cameraW / 2+ $(document).scrollLeft();
nowTop = e.clientY-objOriDivTop - opt.cameraH / 2 + $(document).scrollTop();
if (nowLeft <= 0) nowLeft = 0;
else if (nowLeft >= cameraMaxLeft) nowLeft = cameraMaxLeft;
if (nowTop <= 0) nowTop = 0;
else if (nowTop >= cameraMaxTop) nowTop = cameraMaxTop;
objCamera.css({ left: nowLeft + "px", top: nowTop + "px" }); //镜头的移动
nowLeft = nowLeft * zoom;
nowTop = nowTop * zoom;
objZoomImg.css({ "margin-left": -nowLeft + "px", "margin-top": -nowTop + "px" });
});
});
objCamera.on("mouseout", function (e) {
$(this).hide();
$(document).off("mousemove");
$(opt.zoom, obj).hide();
});
}
})(jQuery);
插件的调用:
$(function () {
$(".test").gysFdj({ ori: ".testOri", zoom: ".testZoom"});
});
自己写的jQuery放大镜插件效果(一)(采用一张大图和一张小图片的思路)的更多相关文章
- 自己写的jQuery放大镜插件效果(二)(采用只有一张图片的思路)
废话不多说,先看效果图,和上一章节用的是同一个小图片: 这个方法实现的放大有个弊端就是放大倍数设置的过大的话,会带来图片上的模糊.但是图片加载的话要比使用2张图片加载的快很多 插件代码: ; (fun ...
- Jquery放大镜插件---imgzoom.js(原创)
Jquery放大镜插件imgzoom能够实现图片放大的功能,便于与原图进行比较. 使用方法: 1.引入jQuery与imgzoom,imgzoom.css <link rel="sty ...
- jquery放大镜插件与样式
这是放大镜插件链接,我已经上传到我博客http://files.cnblogs.com/valiant1882331/%E6%94%BE%E5%A4%A7%E9%95%9C%E6%8F%92%E4%B ...
- jQuery放大镜插件jqzoom使用
源码下载,使用指导地址:http://www.mind-projects.it/projects/jqzoom/ 使用教程: 1.导入库文件 <script src="../js/jq ...
- 批发网加盟页面轮播Jquery jcarousellite插件效果
Jquery jcarousellite 插件的好处 其中: 参数说明: btnPrev string 上一个按钮的class名, 比如 btnPrev: ".prev" ...
- 玉渊潭赏樱花有感:从无到有写一个jQuery开源插件
“玉渊潭公园樱花节”是每年樱花绽放时,都会在玉渊潭公园樱举办樱花节,游客前往玉渊潭公园,可以欣赏到20个品种2000株樱花.2016玉渊潭樱花节时间:3月中旬-4月中旬观赏最佳,2016年3月23日开 ...
- jQuery放大镜插件
(function($) { $.fn.magnifier = function(options){ var options = $.extend({ bigWidth: 400, //大图高度 bi ...
- 自己写的jQuery颜色插件
界面效果: 插件js代码: ;(function ($) { //122种颜色 var aColors = [ "ff0000", "ffff00", &quo ...
- BootStrap入门教程 (四) :JQuery类库插件(模态窗口,滚动监控,标签效果,提示效果,“泡芙”效果,警告区域,折叠效果,旋转木马,输入提示)
上讲回顾:Bootstrap组件丰富同时具有良好可扩展性,能够很好地应用在生产环境.这些组件包括按钮(Button),导航(Navigation),缩略图( thumbnails),提醒(Alert) ...
随机推荐
- C语言基础:初级指针 分类: iOS学习 c语言基础 2015-06-10 21:50 30人阅读 评论(0) 收藏
指针:就是地址. & 取地址运算符 %p 打印地址占位符 int a=0; printf("%p ",&a); 指针变量:用来存放地址的变量 定义: ...
- [LeetCode&Python] Problem 883. Projection Area of 3D Shapes
On a N * N grid, we place some 1 * 1 * 1 cubes that are axis-aligned with the x, y, and z axes. Each ...
- 重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源
今天这篇文章我们打算来深度解读一下equal方法以及其关联方法hashCode(),我们准备从以下几点入手分析: 1.equals()的所属以及内部原理(即Object中equals方法的实现原理) ...
- HDU 4662 MU Puzzle 数论或者水题
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4662 题目是问目标串能否由MI得到,我们可以逆向思维,目标串能否反过来处理得到MI,所以,首先排除M ...
- (3)socket的基础使用(基于UDP协议)
服务端代码 import socket server =socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #SOCK_DGRAM就是数据报,UDP就是数据 ...
- Struts2重新学习1
一:框架 1:框架的意义在于可以大大提高我们的开发效率.框架时一种主动设计,使用框架必须遵守框架指定好的开发流程. 2:框架的强大之处不是源自它能让你做什么,而是它不能让你做什么.有规有矩,方可成方圆 ...
- MySQL--增加或修改列注释
##=============================================## ## 在创建表的时候为字段添加注释 ## CREATE TABLE TB003 ( ID INT P ...
- citus real-time 分析demo( 来自官方文档)
citus 对于多租户以及实时应用的开发都是比较好的,官方也提供了demo 参考项目 https://github.com/rongfengliang/citus-hasuar-graphql 环 ...
- 一个简单的批量更新oracle 数据库中 最近的服务商名称的数据
有一个需求是这样的,我们需要更新数据库中的数据,数据时这样的 1.大约50万以上 2. 数据中有较多的重复数据 3. 需要将表中最近的代理商的名称赋值给行中的服务商名称 4. 代理商的名称可能有多个, ...
- gridview 自动序号 合计
第一种方式,直接在Aspx页面GridView模板列中.这种的缺点是到第二页分页时又重新开始了. <asp:TemplateField HeaderText="序号" Ins ...