基于Jquery插件开发之图片放大镜效果(仿淘宝)


Posted in Javascript onNovember 19, 2011

需求:公司某个网站,需要实现图片预览效果,并能像淘宝一样实现局部分大!

思索:为了考虑开发速度,最先考虑的是想使用网络上的现成代码!但是大致搜索了一下,网上可用的代码并不多,而且部分效果并不理想!而且有些代码,估计阅读下来比自己写一个成本还要高,于是产生了自己写一个jquery的插件的想法!

原理:最起考虑的原理是,两张图片,一张小图,一张大图,先获取鼠标在小图上面的坐标,然后以一个div来显示大图,并根据小图的坐标乘以大图除以小图得到的倍数定位!开始是把大图设为平铺不重复北景,然后使用背景的position属性来定位,理果比较理想,但是在IE6下面,图片存在闪烁,于是改成以图片的绝对定位方式显示!

效果图:

基于Jquery插件开发之图片放大镜效果(仿淘宝)

代码:

/* 
* 
* JQUERY 之简易放大镜插件-JNMagnifier 
* Author:翅膀的初衷 
* QQ:4585839 
* Date:2011-11-16 
* 
*/ 
(function($){ 
$.fn.JNMagnifier=function(setting){ 
if(setting&&setting.renderTo){ 
if(typeof(setting.renderTo)=="string"){ 
setting.renderTo = $(setting.renderTo); 
} 
}else{ 
return; 
} 
var _img_org_ = this.children("img"); 
_img_org_.css("cursor","pointer"); 
var __w = 0; 
var __h = 0; 
var __left = this.offset().left; 
var __top = this.offset().top; 
if(this.offsetParent()) 
{ 
__left+=this.offsetParent().offset().left; 
__top+=this.offsetParent().offset().top; 
} 
var _move_x = 0; 
var _move_y = 0; 
var _val_w = (setting.renderTo.width() / 2); 
var _val_h = (setting.renderTo.height() / 2); 
_img_org_.mouseover(function(){ 
setting.renderTo.html('<img src="' + _img_org_.attr("src") + '" style="position:absolute;" id="JNMagnifierrenderToImg" />'); 
setting.renderTo.show(); 
var timer = setInterval(function(){ 
__w = $("#JNMagnifierrenderToImg").width() / _img_org_.width(); 
__h = $("#JNMagnifierrenderToImg").height() /_img_org_.height(); 
if(__w>0){ 
clearInterval(timer); 
} 
},100); 
}); 
_img_org_.mouseout(function(){ 
setting.renderTo.hide(); 
}); 
_img_org_.mousemove(function(e){ 
_move_x =0-Math.round((document.documentElement.scrollLeft+e.clientX-__left) * __w - _val_w); 
_move_y =0-Math.round((document.documentElement.scrollTop+e.clientY-__top) * __h - _val_h); 
$("#JNMagnifierrenderToImg").css({"left":_move_x + "px ","top":_move_y + "px"}); 
}); 
} 
})(jQuery);

调用方法:
$("#ShowPictureBox").JNMagnifier({ 
renderTo:"#ShowBigPictureBox" 
});

HTML
<div id="ShowPictureBox"> 
<img src="图片" width="200" height="200"> 
</div> 
<div id="ShowBigPictureBox" style=" position:absolute; overflow:hidden; display:none; border:3px solid #ccc; padding:5px; background-repeat:no-repeat; background-color:#fff; width:300px; height:300px;"> 
<!--这里显示放大效果--> 
</div>

注意事项:
这里没有使用两张图片,只用了一张图,图片为大图,长宽必须大于放大效果DIV的大小!默认放大倍数为原图与显示小图之间的倍数,如果需要控制放大倍数,可以手动的为“_img_org_.mouseover” 事件中的图片设定对应的长宽就可以实现 
Javascript 相关文章推荐
IE和Firefox下javascript的兼容写法小结
Dec 10 Javascript
Jquery上传插件 uploadify v3.1使用说明
Jun 18 Javascript
详谈js遍历集合(Array,Map,Set)
Apr 06 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
Feb 08 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
Apr 14 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
Jan 07 Javascript
详解jQuery中的getAll()和cleanData()
Apr 15 jQuery
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 Javascript
Vue + Elementui实现多标签页共存的方法
Jun 12 Javascript
基于vue写一个全局Message组件的实现
Aug 15 Javascript
如何解决jQuery 和其他JS库的冲突
Jun 22 jQuery
echarts.js 动态生成多个图表 使用vue封装组件操作
Jul 19 Javascript
20款效果非常棒的 jQuery 插件小结分享
Nov 18 #Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
Nov 18 #Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
Nov 17 #Javascript
Jquery 获取checkbox的checked问题
Nov 16 #Javascript
JS 操作符整理[推荐收藏]
Nov 15 #Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
Nov 15 #Javascript
关于js datetime的那点事
Nov 15 #Javascript
You might like
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
2015/08/04 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
Python入门篇之编程习惯与特点
2014/10/17 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
python 多线程串行和并行的实例
2019/02/22 Python
python plotly画柱状图代码实例
2019/12/13 Python
dpn网络的pytorch实现方式
2020/01/14 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
LODI女鞋在线商店:阿利坎特的鞋类品牌
2019/02/15 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
公司董事长职责
2013/12/12 职场文书
关于安全的标语
2014/06/10 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
Android studio 简单计算器的编写
2022/05/20 Java/Android