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 相关文章推荐
javascript js cookie的存储,获取和删除
Dec 29 Javascript
基于jquery的15款幻灯片插件
Apr 10 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 Javascript
JavaScript中伪协议 javascript:使用探讨
Jul 18 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
Mar 03 Javascript
分享15个大家都熟知的jquery小技巧
Dec 02 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
Sep 24 Javascript
Vuex之理解Store的用法
Apr 19 Javascript
解决jquery appaend元素中id绑定事件失效的问题
Sep 12 jQuery
angularjs实现table增加tr的方法
Feb 27 Javascript
JavaScript设计模式之代理模式简单实例教程
Jul 03 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
Oct 09 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
PHP下判断网址是否有效的代码
2011/10/08 PHP
Yii分页用法实例详解
2014/12/04 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
取得父标签
2006/11/14 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
ES6新增的math,Number方法
2017/08/06 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
python在windows下实现备份程序实例
2014/07/04 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
高级电工工作职责
2013/11/21 职场文书
电脑教师的自我评价
2013/12/18 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
会议邀请函
2015/01/30 职场文书
学校少先队工作总结
2015/08/12 职场文书