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 相关文章推荐
用js实现的检测浏览器和系统的函数
Apr 09 Javascript
JS 用6N±1法求素数 实例教程
Oct 20 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
Jun 20 Javascript
深入浅析JavaScript中的constructor
Apr 19 Javascript
jQuery通用的全局遍历方法$.each()用法实例
Jul 04 Javascript
Vue结合原生js实现自定义组件自动生成示例
Jan 21 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
Feb 08 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
Oct 12 Javascript
开发中常用的25个JavaScript单行代码(小结)
Jun 28 Javascript
浅析Angular 实现一个repeat指令的方法
Jul 21 Javascript
JS合并两个数组的3种方法详解
Oct 24 Javascript
vue实现抽屉弹窗效果
Nov 15 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
php中实现记住密码自动登录的代码
2011/03/02 PHP
PHP多文件上传实例
2015/07/09 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
js 幻灯片的实现
2011/12/06 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
解决VueCil代理本地proxytable无效报错404的问题
2020/11/07 Javascript
Python的一些用法分享
2012/10/07 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
Python定义一个Actor任务
2020/07/29 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
韩语专业本科生求职信
2013/10/01 职场文书
英语专业推荐信
2013/11/16 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
促销活动方案模板
2014/02/24 职场文书
求职信怎么写
2014/05/23 职场文书
公司委托书怎么写
2014/08/02 职场文书
钳工实训报告总结
2014/11/04 职场文书
车间统计员岗位职责
2015/04/14 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
公司车队管理制度
2015/08/04 职场文书