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 相关文章推荐
7个Javascript地图脚本整理
Oct 20 Javascript
javascript通过className来获取元素的简单示例代码
Jan 10 Javascript
jQuery实现的五子棋游戏实例
Jun 13 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
Aug 05 Javascript
解决wx.onMenuShareTimeline出现的问题
Aug 16 Javascript
JavaScript实现DOM对象选择器
Sep 24 Javascript
Angularjs之filter过滤器(推荐)
Nov 27 Javascript
基于AGS JS开发自定义贴图图层
Mar 31 Javascript
Vue中使用sass实现换肤功能
Sep 07 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
Oct 23 Javascript
js实现无刷新监听URL的变化示例代码详解
Jun 03 Javascript
jQuery 动态粒子效果示例代码
Jul 07 jQuery
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
360通用php防护代码(使用操作详解)
2013/06/18 PHP
Laravel框架表单验证详解
2014/09/04 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
javascript,jquery闭包概念分析
2010/06/19 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
Python验证企业工商注册码
2015/10/25 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
Python操作qml对象过程详解
2019/09/26 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
new修饰符是起什么作用
2015/06/28 面试题
工程招投标邀请书
2014/01/30 职场文书
毕业生自荐信格式
2014/03/07 职场文书
实习指导老师评语
2014/04/26 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
村党建工作汇报材料
2014/11/02 职场文书
人事局接收函
2015/01/30 职场文书
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python