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编写的第一人称射击游戏
Feb 25 Javascript
jQuery JSON的解析方式分享
Apr 05 Javascript
JavaScript使用focus()设置焦点失败的解决方法
Sep 03 Javascript
jQuery实现按键盘方向键翻页特效
Mar 18 Javascript
基于JS判断iframe是否加载成功的方法(多种浏览器)
May 13 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
Jun 03 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
Dec 13 Javascript
深入理解vue2.0路由如何配置问题
Jul 18 Javascript
ES6解构赋值的功能与用途实例分析
Oct 31 Javascript
nginx+vue.js实现前后端分离的示例代码
Feb 12 Javascript
JavaScript中click和onclick本质区别与用法分析
Jun 07 Javascript
Vue+Vuex实现自动登录的知识点详解
Mar 04 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生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
Javascript 布尔型分析
2008/12/22 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
javascript数据类型验证方法
2015/12/31 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
Python 如何访问外围作用域中的变量
2016/09/11 Python
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
高中毕业自我鉴定
2013/12/22 职场文书
预备党员思想汇报
2014/01/08 职场文书
食堂个人先进事迹
2014/01/22 职场文书
求职信的最佳写作思路
2014/02/01 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
幼教求职信
2014/03/12 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python