基于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与其它库冲突的解决方法
Jun 25 Javascript
jquery ajax方式直接提交整个表单核心代码
Aug 15 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
Sep 10 Javascript
ECharts仪表盘实例代码(附源码下载)
Feb 18 Javascript
vue2.0+webpack环境的构造过程
Nov 08 Javascript
老生常谈jacascript DOM节点获取
Apr 17 Javascript
Vue.js对象转换实例
Jun 07 Javascript
web前端vue之vuex单独一文件使用方式实例详解
Jan 11 Javascript
Iview Table组件中各种组件扩展的使用
Oct 20 Javascript
使用react render props实现倒计时的示例代码
Dec 06 Javascript
通过循环优化 JavaScript 程序
Jun 24 Javascript
在antd4.0中Form使用initialValue操作
Nov 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
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
jquery DOM操作 基于命令改变页面
2010/05/06 Javascript
动态加载js和css(外部文件)
2013/04/17 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
Python读取键盘输入的2种方法
2015/06/16 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
高考考python编程是真的吗
2020/07/20 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
班级聚会策划书
2014/01/16 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
竞赛口号大全
2014/06/16 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
酒桌上的开场白
2015/06/01 职场文书
庆七一晚会主持词
2015/06/30 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
Minikube搭建Kubernetes集群
2022/03/31 Servers