基于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魔力之$(&quot;tagName&quot;)与selector
Mar 05 Javascript
JS中的log对象获取以及debug的写法介绍
Mar 03 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
Apr 23 Javascript
jQuery.position()方法获取不到值的安全替换方法
Mar 13 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
Oct 09 Javascript
深入解析JavaScript中函数的Currying柯里化
Mar 19 Javascript
基于 Node.js 实现前后端分离
Apr 23 Javascript
jQuery获取同级元素的简单代码
Jul 09 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
Oct 10 Javascript
JavaScript实现256色转灰度图
Feb 22 Javascript
详解jQuery中关于Ajax的几个常用的函数
Jul 17 jQuery
JavaScript实现动态生成表格
Aug 02 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
PHP面向对象详解(三)
2015/12/07 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
面向对象的javascript(笔记)
2009/10/06 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
jcrop基本参数一览
2013/07/16 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
[53:10]完美世界DOTA2联赛决赛日 FTD vs GXR 第二场 11.08
2020/11/11 DOTA
python使用socket连接远程服务器的方法
2015/04/29 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
Python shutil模块用法实例分析
2019/10/02 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
英国手机零售商:Metrofone
2019/03/18 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
中西医结合临床医学专业大学生自荐信
2013/09/28 职场文书
中职生自我鉴定范文
2013/10/03 职场文书
物业保安主管岗位职责
2013/12/25 职场文书
高中生物教学反思
2014/02/05 职场文书
经营理念口号
2014/06/21 职场文书
运动会1000米加油稿
2015/07/21 职场文书
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers