基于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 相关文章推荐
一直复略了的一个问题,关于表单重复提交
Feb 15 Javascript
浅析return false的正确使用
Nov 04 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
Nov 22 Javascript
JavaScript中Cookie操作实例
Jan 09 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
Jun 01 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
Jun 23 Javascript
Bootstrap实现水平排列的表单
Jul 04 Javascript
Bootstrap基本组件学习笔记之导航(10)
Dec 07 Javascript
js 轮播效果实例分享
Dec 28 Javascript
vue-router权限控制(简单方式)
Oct 29 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
JS删除对象中某一属性案例详解
Sep 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
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
js loading加载效果实现代码
2009/11/24 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
JS获取地址栏参数的几种方法小结
2014/02/28 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
python编程实现希尔排序
2017/04/13 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
C语言基础笔试题
2013/04/27 面试题
称象教学反思
2014/02/03 职场文书
社区党务公开实施方案
2014/03/18 职场文书
行政管理专业求职信
2014/07/06 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS