基于jquery的放大镜插件

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<script src="../jquery-1.8.3.min.js" type="text/javascript"></script>
<style type="text/css">
body {
margin: 0
}

.imgDiv {
position: relative;
width: 384px;
height: 240px;
}

.imgDiv img {
width: 100%;
height: 100%;
}

.zoomDiv {
position: absolute;
background: #000;
opacity: .3;
filter: alpha(opacity=30);
-moz-opacity: 0.3;
-khtml-opacity: 0.3;
}

.rangeDiv {
position: absolute;
left: 0;
top: 0;
}

.rangeDiv img {
width: 100%;
}

.imgBox {
position: absolute;
left: 600px;
top: 10px;
overflow: hidden;
}

.imgBox img {
position: absolute;
left: 0;
top: 0
}

.imgDiv2 {
position: relative;
width: 384px;
height: 240px;
cursor: crosshair;
margin-top: 50px;
margin-left: 100px;
}

.zoomGlass {
position: absolute;
left: 0;
top: 0;
display: none;
background: url(big.jpg);
overflow: hidden;
border-radius: 50%;
/*box-shadow:1px 1px 1px #eee,-1px -1px 1px #eee;*/
}

.imgDiv2 img {
width: 100%;
border: none;
vertical-align: bottom;
display: block;
}
</style>

<body>
<div id="imgDiv" class="imgDiv">
<img class="img" id="img1" src="1.jpg" data-img="1.jpg" />
</div>
<div id="" class="imgBox"></div>
<div id="imgDiv2" class="imgDiv2">
<img class="img" src="1.jpg" data-img="1.jpg" />
<div class="zoomGlass"></div>
</div>
</body>

</html>
<script type="text/javascript">
/*===================================
* createTime: 2016/11/14
* version: 1.0
* modify: {}
*arguements:{zoomDom:,w:,h:,range:,style:放大风格}放大图片的父级元素/放大镜,蒙层的大小,放大倍数
* description: 图片框的大小要和图片成比例,
===================================*/
(function($) {
$.fn.imgZoom = function(options) {
//默认参数
var defualts = {
w: 200, //蒙层的宽度
h: 200, //蒙层的高度
range: 2,
zoomDom: ‘#imgBox‘,
style: 1
}
var opts = $.extend({}, defualts, options);
var consts = {};
var that = $(this);
var imgBoxDom = $(opts.zoomDom);
var zoomImg = ‘‘;
var imgload = false;
var img = new Image();
return this.each(function() {
that.hover(function() {
function e(t) {
this.x = t.pageX, this.y = t.pageY
}
var _this = $(this);
var src = _this.find("img").attr(‘data-img‘),
left = _this.offset().left,
top = _this.offset().top;
if (opts.style == 1) {
zoomImg = $(‘<div class="rangeDiv"><img class="zoomImg" src="http://image.meilele.com/images/blank.gif"/></div>‘);
var zoomDiv = $(‘<div class="zoomDiv"></div>‘);
zoomDiv.appendTo(that).width(opts.w + ‘px‘).height(opts.h + ‘px‘);
} else {
imgBoxDom.width(opts.w).height(opts.h).show();
zoomImg = $(‘<img class="zoomImg" src="http://image.meilele.com/images/blank.gif"/>‘);
zoomImg.width(consts.midwidth * opts.range + ‘px‘).height(consts.midheight * opts.range + ‘px‘)
zoomImg.appendTo(imgBoxDom);
}
img.src = src;
if (imgload) {
$(‘.zoomImg‘).attr(‘src‘, src);
} else {
img.onload = function() {
$(‘.zoomImg‘).attr(‘src‘, src);
imgload = true;
}
}
//获取宽高
consts = {
midwidth: that.width(),
midheight: that.height(),
bigwidth: (opts.w) * opts.range,
bigheight: (opts.h) * opts.range
}
//设置宽高
zoomImg.width(consts.midwidth * opts.range + ‘px‘).height(consts.midheight * opts.range + ‘px‘)
imgBoxDom.append(zoomImg);
if (opts.style == 1) {
//放大图的div大小
imgBoxDom.width(consts.bigwidth + ‘px‘).height(consts.bigheight + ‘px‘);
var minX = opts.w / 2,
maxX = consts.midwidth - opts.w / 2,
minY = opts.h / 2,
maxY = consts.midheight - opts.h / 2;
} else {
var minX = opts.w / (opts.range * 2),
maxX = consts.midwidth - opts.w / (opts.range * 2),
minY = opts.h / (opts.range * 2),
maxY = consts.midheight - opts.h / (opts.range * 2);
}

_this.on(‘mousemove‘, function(event) {
var mouse = new e(event);
var r = 2 / (opts.range - 1)
if (opts.style == 1) {
var zleft = zoomDiv.offset().left - left,
ztop = zoomDiv.offset().top - top;

} else {
var zleft = mouse.x - left - opts.w / 2,
ztop = mouse.y - top - opts.h / 2;
}

var pageX = mouse.x - left,
pageY = mouse.y - top;
//判断蒙层的范围
if (pageX < maxX) {
pageX = pageX < minX ? minX : pageX
} else {
pageX = pageX > maxX ? maxX : pageX
}

if (pageY < minY) {
pageY = pageY < minY ? minY : pageY
} else {
pageY = pageY > maxY ? maxY : pageY
}

var zlocationX = pageX - opts.w / 2,
zlocationY = pageY - opts.h / 2;

if (opts.style == 1) {
zoomDiv.css({
left: zlocationX,
top: zlocationY
});
zoomImg.css({
left: -zleft * opts.range + ‘px‘,
top: -ztop * opts.range + ‘px‘
})
} else {
imgBoxDom.css({
left: zlocationX,
top: zlocationY,
});
imgBoxDom.animate({
scrollLeft: zleft * opts.range + opts.w / r,
scrollTop: ztop * opts.range + opts.h / r
}, 0);
}
});
}, function() {
if (opts.style == 1) {
$(‘.zoomDiv‘).remove();
$(‘.rangeDiv‘).remove();
} else {
imgBoxDom.hide();
zoomImg.remove();
}
});
});
}
})(jQuery);
$(‘#imgDiv‘).imgZoom({
range: 5,
w: 200,
h: 200,
zoomDom: ‘.imgBox‘
});
$(‘#imgDiv2‘).imgZoom({
range: 5,
w: 300,
h: 300,
zoomDom: ‘.zoomGlass‘,
style: 2
});
</script>

时间: 2024-10-03 22:35:07

基于jquery的放大镜插件的相关文章

基于jQuery的滚动条插件-jquery.jscrollbar

jquery.jscrollbar 是一个基于jQuery的滚动条插件,支持水平滚动条和垂直滚动条,支持鼠标键盘事件 主要功能 支持水平滚动条 支持垂直滚动条 自动判断水平滚动条和垂直滚动条是否显示 支持外部调用来滚动内容 支持滚动条部分样式自定义 支持键盘方向键控制 支持鼠标滚动(需要mousewheel插件) 支持滚动条显示位置设置(外部|悬浮) 支持手动更新界面 依赖的库 jQuery (http://jquery.com/) jquery.jqdrag (https://github.c

基于jquery下拉列表树插件代码

分享一款基于jquery下拉列表树插件代码.这是一款实用的jquery 树形下拉框 下拉树代码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <table width="100%" align="center" cellpadding="0" cellspacing="0"> <tr> <td colspan="1" bgcolor="#FF

基于jQuery的tooltips插件--poshytip

摘要: 分享一款在项目中使用的tooltips插件--poshytip,这是一款基于jQuery的插件,其特点是简单易用,支持浏览器:IE6+, FF 2+, Opera 9+, Safari 3+, Chrome,并且带有六种皮肤的提示框 Install: 下载poshytip插件,解压之后将文件夹src拷贝到项目中,然后引入js和css文件. 1 <link rel="stylesheet" href="../src/tip-yellow/tip-yellow.cs

一款基于jQuery的分页插件

特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/ 1.效果示例 2.代码样式 /* * 基于jquery 分页插件 * by [email protected] */ $(function (){ window.pageUtil = { /** * 构建分页 * @param {Object} divId 要绑定的容器 * @pa

基于jQuery的日历插件

上个星期看到同事做一个有关日历提醒功能的需求,为了找个插件也是费了不少心思,然后刚好有时间就试着写了一个简单demo 来看下最终效果图吧: 是长得丑了一点,不要吐槽我-.- 首先来说说这个日历主要的制作逻辑吧: ·一个月份最多有31天,需要一个7X6的表格去装载 ·如果知道了某个月份1号是星期几,这个月份有多少天,一个循环就可以显示某个月的日历了吧(眼睛都放光了*.*) ·加上一些控件让用户可以方便操作吧(比如可以输入年份.月份,可以点击选择年份.月份) 新建一个html文件,html结构: <

两款基于Jquery的图表插件

一.EasyPieChart 页面加载时,运行initPieChart()函数,调用easyPieChart()函数,显示出图表. 代码: var initPieChart = function() { $('.percentage').easyPieChart({ animate: 1000 }); $('.percentage-light').easyPieChart({ barColor: function(percent) { percent /= 100; return "rgb(&q

jquery easyui+sparkline插件+jqplot插件实现数据表行内插入线形图

Jquery easyui : 实现前端数据包格式化输出,支持多种模块式定义,只需要添加相应的预设参数即可实现丰富的前端. 资料参考: http://www.jeasyui.com/ Jquery sparkline: 基于jQuery 的js插件,底层调用html5的canvas标签,并通过js动态实现在数据表行内画条形图或趋势图,操作简单,可实现不同类型的图形化,如线形图,饼状图,柱形图. 资料参考:http://omnipotent.net/jquery.sparkline/#s-docs

jquery数字打分插件与嵌入到EasyUI datagrid中的示例

这阵儿是断续折腾定性考评表打分的事儿了.虽是UI菜鸟,但却一直想让用户在操作上更加方便,之前基于"jQuery星级评分插件"实现了一个评分界面(因为比较简单,就不做总结了),用户反应还不错. 这一次的评分表中,各项分值的特点有:一是每个评分项的分值均不太一样:二是分值为整数,但分值范围大,从-1000到+1000都存在.若是采用在datagrid中嵌入编辑框的形式实现的话,总是觉得让用户使用不太方便,所以内心非常想做一个数字插件,然后就搜到中意的例子--"简单的jQuery用

jQuery拖拽插件制作拖拽排序特效

基于jQuery拖拽插件制作拖拽排序特效是一款非常实用的鼠标拖拽布局插件.效果图如下: 在线预览   源码下载 实现的代码. html代码: <h1>水平拖拽</h1> <div class="demo"> <div class="item item1"><span>1</span></div> <div class="item item2"><