基于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 相关文章推荐
用JS实现一个页面多个css样式实现
May 29 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
May 25 Javascript
深入分析js的冒泡事件
Dec 05 Javascript
node.js中的http.get方法使用说明
Dec 14 Javascript
JavaScript实现搜索框的自动完成功能(一)
Feb 25 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
Aug 08 Javascript
原生js FileReader对象实现图片上传本地预览效果
Mar 27 Javascript
浅谈webpack编译vue项目生成的代码探索
Dec 11 Javascript
layui点击导航栏刷新tab页的示例代码
Aug 14 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
Sep 13 Javascript
原生js实现each方法实例代码详解
May 27 Javascript
JS运算符优先级与表达式示例详解
Sep 04 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执行.SQL文件
2013/07/05 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
php比较相似字符串的方法
2015/06/05 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
php curl常用的5个经典例子
2017/01/20 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
python实现的阳历转阴历(农历)算法
2014/04/25 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
python监控键盘输入实例代码
2018/02/09 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
高中毕业生个人自我鉴定
2013/11/24 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
明星邀请函
2015/02/02 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL