图像远处放大 jQuery插件
2009-11-30 15:00
363 查看
为了让本地图片、远程图片、过小的图片都适应此插件,有很多细节问题要处理。
首先定义结构:
<div class="imgMagnifierWrap"> <div class="overlay"><!--覆盖层,鼠标的感应区域,位于小图上最方--></div> <div class="tipboxHover"><!--小图上方的悬停提示方框--></div> <div class="imgOriginal"><!--装载大图的容器,绝对定位<img src="bigOne.jpg" /><!--前景大图,绝对定位--></div> </div>
[/code]
<!--样式--> <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; };
[/code]
再计算感应区域:小图所处感应区域四边各减去指示方框各四边的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!'); } });
[/code]
大图预载的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(); };
[/code]
随便一提,如果只有一种浏览器,也许会很幸运。
查看:
/Files/ambar/demos/imgMagnifier/demo.htm
相关文章推荐
- 基于jQuery点击图像居中放大插件Zoom
- Cloud Zoom是一个图像放大jQuery插件,
- 一个图像放大功能的jquery插件:fancybox
- jQuery chili图片远处放大插件
- jquery插件jqzoom图像放大镜功能,类似淘宝图像放大功能
- jQuery chili图片远处放大插件
- jQuery-图片上传裁剪插件--imgAreaSelect(分析二) 同步显示图像位置信息
- 15 个响应式的 jQuery 图像滑块插件
- jquery图片查看插件,支持旋转、放大、缩小、拖拽、缩略图(仿qq图片查看)
- jquery图片查看插件,支持旋转、放大、缩小、拖拽、缩略图(仿qq图片查看)
- 推荐两款简单好用的图片放大jquery插件
- jQuery 图像裁剪插件Jcrop的简单使用
- 13 款最棒的 jQuery 图像 360° 旋转插件
- Viewer 是一款强大的 jQuery 图像浏览插件。
- ZoomMarker 一款用于图片滚动放大拖动,且可以添加标记的jQuery插件
- jQuery编写的javascript图像画廊插件Galleria
- 关于CSS的图像放大问题的解决,需要借助jQuery等直接用css3设置
- 来自国外的14个图片放大编辑的jQuery插件整理
- jQuery 图片放大预览插件
- JavaScript放大镜插件magnifier实现图像放大效果