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 相关文章推荐
如何从jQuery的ajax请求中删除X-Requested-With
Dec 11 Javascript
快速学习JavaScript的6个思维技巧
Oct 13 Javascript
JavaScript对象数组的排序处理方法
Oct 21 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
Jan 26 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
Sep 27 Javascript
简单几步实现返回顶部效果
Dec 05 Javascript
angularjs实现的前端分页控件示例
Feb 10 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
Mar 15 Javascript
javascript 作用于作用域链的详解
Sep 27 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
Jun 26 Javascript
简述ES6新增关键字let与var的区别
Aug 23 Javascript
JS时间戳与日期格式互相转换的简单方法示例
Jan 30 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 得到根目录的 __FILE__ 常量
2008/07/23 PHP
php开启安全模式后禁用的函数集合
2011/06/26 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
jquery 插件开发备注
2010/08/27 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
分享15个最受欢迎的Python开源框架
2014/07/13 Python
Python的SQLAlchemy框架使用入门
2015/04/29 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
Django model序列化为json的方法示例
2018/10/16 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
2020/11/05 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
全球最大的服务市场:Fiverr
2017/01/03 全球购物
俄罗斯韩国化妆品网上商店:Cosmasi.ru
2019/10/31 全球购物
你所知道的集合类都有哪些?主要方法?
2012/12/31 面试题
如何将字串String转换成整数int
2015/02/21 面试题
艺术爱好者的自我评价分享
2013/10/08 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
公务员政审材料范文
2014/12/23 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书