基于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 相关文章推荐
EXT中xtype的含义分析
Jan 07 Javascript
鼠标焦点离开文本框时验证的js代码
Jul 19 Javascript
基于javascript的COOkie的操作实现只能点一次
Dec 26 Javascript
js随机生成26个大小写字母
Feb 12 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
Jan 17 Javascript
详解Vue.js 2.0 如何使用axios
Apr 21 Javascript
javascript 日期相减-在线教程(附代码)
Aug 17 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
JavaScript命名空间模式实例详解
Jun 20 Javascript
node使用request请求的方法
Dec 20 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
Apr 29 Javascript
vue实现图片上传到后台
Jun 29 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中的三元运算符使用说明
2011/07/03 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
pymssql ntext字段调用问题解决方法
2008/12/17 Python
python实现360的字符显示界面
2014/02/21 Python
爬山算法简介和Python实现实例
2014/04/26 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
Python多进程同步简单实现代码
2016/04/27 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
学Python 3的理由和必要性
2019/11/19 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
年会活动策划方案
2014/01/23 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python