jQuery chili图片远处放大插件


Posted in Javascript onNovember 30, 2009

为了让本地图片、远程图片、过小的图片都适应此插件,有很多细节问题要处理。

首先定义结构:
<div class="imgMagnifierWrap"> 
<div class="overlay"><!--覆盖层,鼠标的感应区域,位于小图上最方--></div> 
<div class="tipboxHover"><!--小图上方的悬停提示方框--></div> 
<div class="imgOriginal"><!--装载大图的容器,绝对定位<img src="bigOne.jpg" /><!--前景大图,绝对定位--></div> 
</div>
<!--样式--> 
<style type="text/css"> 
.imgMagnifierWrap *{position:absolute;background:#fff;} 
.imgMagnifierWrap .tipboxHover{width:80px; height:60px; filter:alpha(opacity=30);opacity:.3;display:none;} 
.imgMagnifierWrap .imgOriginal{display:none;z-index:9999;overflow:hidden; width:400px; height:400px; 
    background-color:#cdf; background-repeat:no-repeat; text-align:center;border:1px solid #555; } 
.imgMagnifierWrap .overlay{cursor:crosshair;filter:alpha(opacity=0);opacity:0;} 
<style>
然后考虑图片预加载:
$.imgPreloader=function(url,eventLists){ 
var img=new Image(); 
var $img=$(img); 
img.src=url; 
$.each(eventLists,function(type,fn){ 
$img.bind(type,fn); 
}); 
$img.trigger(img.complete?'load':'begin'); 
return $img; 
};
再计算感应区域:
小图所处感应区域四边各减去指示方框各四边的1/2大小的矩形,在此之外的区域则显示到大图边界:
var borderLeft =thumbInfo.left+tipboxInfo.width/2; 
var ratioX=(mouseInfo.x-borderLeft)/(thumbInfo.width-tipboxInfo.width);
用大图用做背景图片引发的问题:
用隐藏的前景图片预加载,load事件判断时机,ie,chrome正常,ff请求了两次图片,图片未缓存;
换一种方式,不预载大图。改成直接在大图位置用覆盖层做“loading”后,chrome下表现为渐进加载图片,非chrome是直接显示,略有遗憾。
最终结果,把大图用做前景图片:
优势在于,大图的load和error事件都可以正常工作:
$.imgPreloader($anchor.attr('href'),{ 
load:function(){ 
isImageReady=true; 
$o.empty().append(this); 
setTimeout(autoFitPicture,0); 
}, 
begin:function(){ 
$o.text('loading...'); 
}, 
error:function(){ 
isImageReady=true; 
$o.text('invalid picture!'); 
} 
});

大图预载的load事件和小图mousemove事件不同步的解决办法:实时存储鼠标坐标,把提示方框定位和大图定位的方法分离。

//鼠标位置存储 
var mouseInfo={x:0,y:0}; 
//指示框定位 
var setTipboxPosition=function(e){ 
mouseInfo.x=e.pageX; 
mouseInfo.y=e.pageY; 
$tipbox.css({ 
top:mouseInfo.y<thumbInfo.width/2+thumbInfo.top 
?Math.max(mouseInfo.y-tipboxInfo.height/2,thumbInfo.top) 
:Math.min(mouseInfo.y-tipboxInfo.height/2,thumbInfo.top+thumbInfo.height-tipboxInfo.height), 
left:mouseInfo.x<thumbInfo.width/2+thumbInfo.left 
?Math.max(mouseInfo.x-tipboxInfo.width/2,thumbInfo.left) 
:Math.min(mouseInfo.x-tipboxInfo.width/2,thumbInfo.left+thumbInfo.width-tipboxInfo.width) 
});   
setImgPosition(); 
};

随便一提,如果有一种浏览器,也许会很幸运。
演示代码
打包下载 https://3water.com/jiaoben/22866.html

Javascript 相关文章推荐
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
Oct 14 Javascript
JavaScript 拾碎[三] 使用className属性
Oct 16 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
Feb 20 Javascript
JS+CSS相对定位实现的下拉菜单
Oct 06 Javascript
js实现纯前端的图片预览
Apr 27 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
Oct 05 Javascript
微信小程序 页面跳转传递值几种方法详解
Jan 12 Javascript
Vue 莹石摄像头直播视频实例代码
Aug 31 Javascript
利用jsonp解决js读取本地json跨域的问题
Dec 11 Javascript
JavaScript编写开发动态时钟
Jul 29 Javascript
vue实现打地鼠小游戏
Aug 21 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
Sep 02 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
Nov 30 #Javascript
javascript 设置某DIV区域内的checkbox复选框
Nov 30 #Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
Nov 30 #Javascript
javascript &amp;&amp;和||运算法的另类使用技巧
Nov 28 #Javascript
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
Nov 28 #Javascript
JavaScript 闭包在封装函数时的简单分析
Nov 28 #Javascript
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
Nov 27 #Javascript
You might like
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
php两种无限分类方法实例
2015/04/21 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
JS 控制非法字符的输入代码
2009/12/04 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
layui表格实现代码
2017/05/20 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
Python中生成器和yield语句的用法详解
2015/04/17 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
党员创先争优承诺书
2014/03/26 职场文书
社团活动总结范文
2014/04/26 职场文书
个人收入证明模板
2014/09/18 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
人事局接收函
2015/01/31 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
OpenFeign实现远程调用
2022/08/14 Java/Android