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代码
Mar 10 Javascript
javascript function、指针及内置对象
Feb 19 Javascript
{}与function(){}选用空对象{}来存放keyValue
May 23 Javascript
Function.prototype.bind用法示例
Sep 16 Javascript
JavaScript使用concat连接数组的方法
Apr 06 Javascript
javascript生成大小写字母
Jul 03 Javascript
Javascript 字符串模板的简单实现
Feb 13 Javascript
js匿名函数作为函数参数详解
Jun 01 Javascript
vue 2.0路由之路由嵌套示例详解
May 08 Javascript
Vue2.2.0+新特性整理及注意事项
Aug 22 Javascript
vue input实现点击按钮文字增删功能示例
Jan 29 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
Jul 31 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下关于中英数字混排的字符串分割问题
2010/04/06 PHP
PHP 图片上传代码
2011/09/13 PHP
php目录操作实例代码
2014/02/21 PHP
destoon数据库表说明汇总
2014/07/15 PHP
教大家制作简单的php日历
2015/11/17 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
JS 控件事件小结
2012/10/31 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
python实现多线程的两种方式
2016/05/22 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
精通CAD能手自荐书
2014/01/31 职场文书
国家助学金获奖感言
2014/01/31 职场文书
公共场所禁烟标语
2014/06/25 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
2014年采购员工作总结
2014/11/18 职场文书
求职简历自我评价2015
2015/03/10 职场文书
员工离职证明范本
2015/06/12 职场文书
Echarts如何重新渲染实例详解
2022/05/30 Javascript