基于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 相关文章推荐
JavaScript 检测浏览器和操作系统的脚本
Dec 26 Javascript
javascript div 弹出可拖动窗口
Feb 26 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
Jun 27 Javascript
jQuery中extend()和fn.extend()方法详解
Jun 03 Javascript
JQuery的Pager分页器实现代码
May 03 Javascript
第一次接触Bootstrap框架
Oct 24 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
Mar 14 Javascript
vue如何引用其他组件(css和js)
Apr 13 Javascript
angular-cli修改端口号【angular2】
Apr 19 Javascript
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
基于JavaScript实现五子棋游戏
Aug 26 Javascript
JavaScript设计模式之调停者模式实例详解
Feb 03 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解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
名片管理系统python版
2018/01/11 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
在python中用url_for构造URL的方法
2019/07/25 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
请说出几个常用的异常类
2013/01/08 面试题
英语专业学子个人的自我评价
2013/10/02 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
付款承诺函范文
2015/01/21 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript