jQuery chili图片远处放大插件

 更新时间:2009年11月30日 21:59:42   作者:  
为了让本地图片、远程图片、过小的图片都适应此插件,有很多细节问题要处理。

为了让本地图片、远程图片、过小的图片都适应此插件,有很多细节问题要处理。

首先定义结构:
 
<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://www.jb51.net/jiaoben/22866.html

相关文章

  • jquery编写Tab选项卡滚动导航切换特效

    jquery编写Tab选项卡滚动导航切换特效

    这篇文章主要为大家详细介绍了jquery编写Tab选项卡滚动导航切换特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • jquery 选择器引擎sizzle浅析

    jquery 选择器引擎sizzle浅析

    用jquery的大概有一年了,只知道$(selector),其内部选择器是如何实现并不完全不清晰,汗颜啊于是看了jquery的源码,jquery用的选择器的引擎是sizzle,感兴趣的朋友可以了解下,或许本文对你有所帮助
    2013-02-02
  • jQuery HTML css()方法与css类实例详解

    jQuery HTML css()方法与css类实例详解

    这篇文章主要介绍了jQuery HTML css()方法与css类,结合实例形式详细分析了jQuery HTML css()方法与css类相关函数用法与操作注意事项,需要的朋友可以参考下
    2020-05-05
  • JSONP 跨域访问代理API-yahooapis实现代码

    JSONP 跨域访问代理API-yahooapis实现代码

    介绍一个JSONP 跨域访问代理API-yahooapis,需要的朋友可以参考下
    2012-12-12
  • jQuery实现鼠标响应式淘宝动画效果示例

    jQuery实现鼠标响应式淘宝动画效果示例

    这篇文章主要介绍了jQuery实现鼠标响应式淘宝动画效果,涉及jQuery事件响应及页面元素属性动态操作相关使用技巧,需要的朋友可以参考下
    2018-02-02
  • 基于$.ajax()方法从服务器获取json数据的几种方式总结

    基于$.ajax()方法从服务器获取json数据的几种方式总结

    下面小编就为大家分享一篇基于$.ajax()方法从服务器获取json数据的几种方式总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • jQuery自定义数值抽奖活动代码

    jQuery自定义数值抽奖活动代码

    这篇文章主要为大家详细介绍了jQuery自定义数值抽奖活动的相关代码,具有一定的参考价值,感兴趣的朋友可以参考一下
    2016-06-06
  • jquery实现的3D旋转木马特效代码分享

    jquery实现的3D旋转木马特效代码分享

    这篇文章主要介绍了jquery实现的3D旋转木马特效,功能实现非常简单,推荐给大家,有需要的小伙伴可以参考下。
    2015-08-08
  • js过滤HTML标签以及空格的思路及代码

    js过滤HTML标签以及空格的思路及代码

    今天要做一个应用--判断编辑器中文字的个数。如果少如20个字就不能让其提交。没多想,正好周末的时候看了一下js中正则表达式的内容。很容易就想到了要用正则表达式来解决这个问题。虽说看了正则表达式的内容是看了,但是毕竟还是刚接接触,连基本的概念都很模糊,于是只好在网上找到如下的代码:
    2013-05-05
  • jQuery实现大图轮播

    jQuery实现大图轮播

    本文主要分享了jQuery实现大图轮播的示例代码。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02

最新评论