基于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 相关文章推荐
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
Jan 06 Javascript
JavaScript常用全局属性与方法记录积累
Jul 03 Javascript
JavaScript判断变量是否为undefined的两种写法区别
Dec 04 Javascript
JavaScript、C# URL编码、解码总结
Jan 21 Javascript
vue webuploader 文件上传组件开发
Sep 23 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
Jan 12 Javascript
利用Node.js批量抓取高清妹子图片实例教程
Aug 02 Javascript
vue实现一个炫酷的日历组件
Oct 08 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
May 05 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
Jul 22 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
Oct 28 Javascript
JS实现手风琴特效
Nov 08 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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
走出JavaScript初学困境—js初学
2008/12/29 Javascript
基于jquery的让页面控件不可用的实现代码
2010/04/27 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
2011/04/16 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
js获取视频时长代码
2014/04/10 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
Python 多线程Threading初学教程
2017/08/22 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
幼儿园毕业教师感言
2014/02/21 职场文书
煤矿安全生产责任书
2014/04/15 职场文书
作文评语大全
2014/04/23 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
高中校园广播稿
2014/10/21 职场文书
实习单位推荐信
2015/03/27 职场文书
党委工作总结2015
2015/04/27 职场文书
不同意离婚代理词
2015/05/23 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书