基于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 学习笔记(十五)
Jan 28 Javascript
纯JS实现的批量图片预览加载功能
Aug 14 Javascript
JQuery实现用户名无刷新验证的小例子
Mar 22 Javascript
jQuery遍历json中多个map的方法
Feb 12 Javascript
简单谈谈JS中的正则表达式
Sep 11 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
Sep 16 Javascript
vue路由守卫+登录态管理实例分析
May 21 Javascript
微信小程序中为什么使用var that=this
Aug 27 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
Sep 11 Javascript
JavaScript碰撞检测原理及其实现代码
Mar 12 Javascript
如何制作自己的原生JavaScript路由
May 05 Javascript
javascript canvas实现雨滴效果
Jun 09 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简单命令代码集锦
2007/09/24 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
JTrackBar水平拖动效果
2007/07/15 Javascript
JavaScript中this详解
2015/09/01 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
Python遍历目录的4种方法实例介绍
2015/04/13 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
pygame实现简易飞机大战
2018/09/11 Python
python实现简单flappy bird
2018/12/24 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
Delphi笔试题
2016/11/14 面试题
自我鉴定范文200字
2013/10/02 职场文书
仓管员岗位职责范文
2013/11/08 职场文书
怀念母亲教学反思
2014/04/28 职场文书
医学求职信
2014/05/28 职场文书
趣味运动会策划方案
2014/06/02 职场文书
机械工程师岗位职责
2014/06/16 职场文书
十二生肖观后感
2015/06/12 职场文书
政审证明材料
2015/06/19 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
docker-compose部署Yapi的方法
2022/04/08 Servers