- 浏览: 61021 次
- 性别:
- 来自: 顺德
最新评论
-
liuxf1122:
不支持最新的IE9、10和11!修改了也不行,不知如何是好啊! ...
JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布 -
gongyeye:
$$E.addEvent( this._container, ...
JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布 -
kingliu:
很好,很强大,学习了
JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布 -
lwkjob:
非常强大谢谢
图片延迟加载(按需加载)效果 -
zxh277100963:
判断ie版本 错误,我明细是IE8的判断出来是IE7
JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布
这个效果也叫放大镜效果,最早好像在ppg出现的,之后就有了很多仿制品出来了。
一般用于放大查看商品图片,在凡客,京东商城,阿里巴巴等都有类似的效果。
好处是能在原图附近对图片进行局部放大查看,而且可以通过鼠标控制查看的部位。
这个程序有以下特点:
1,支持使用原图放大或新图片设置大图;
2,大图完成载入前使用原图放大代替,减少操作等待时间;
3,支持鼠标滚动缩放大图;
4,可以通过设置显示范围或显示框大小设置显示尺寸;
5,可以设置是否自动隐藏显示框;
6,支持插件形式的扩展来实现更多的功能(下一篇再详细介绍)。
兼容:ie6/7/8, firefox 3.6.2, opera 10.51, safari 4.0.4, chrome 4.1
前台效果预览
完整实例下载
程序说明
【基本原理】
首先要有一个img元素作为原图对象,还要有一个容器作为显示框。
显示框里面放另一个img元素作为大图对象,并根据比例设置好尺寸。
当鼠标在原图上移动时,通过对大图进行绝对定位来显示对应的部位,实现类似放大镜的效果。
【图片加载】
程序初始化时会先执行_initLoad程序,主要用来载入图片。
由于img在载入之前获取尺寸是不准确的,所以相关参数的计算都要等到图片加载之后。
有两种放大的方式:使用原图放大,和用已经放大的新图片。
原图放大的好处是只需加载一个图片,而使用新图片就可以得到更清晰的效果。
根据不同的方式,会选择对应的原图加载程序:
useOrigin = !this._zoomPic && this._scale,
loadImage = $$F.bind( useOrigin ? this._loadOriginImage : this._loadImage, this );
当没有设置大图但有放大比例时,会自动使用原图放大加载程序。
先看看使用原图放大加载的过程:
1,加载原图:
_originPic属性记录原图地址,如果设置了原图并且跟元素当前加载的图片不同,就设置onload并加载原图。
否则,如果元素当前有加载图片的话,先通过complete判断是否加载完成,没完成就设置onload,已经完成的话就直接执行加载程序。
最后,没有原图图片的话就退出程序。
2,执行_loadOriginImage加载程序:
由于ie6/7的gif图片载入bug,会先重置onload。
然后执行_initLoaded初始化加载设置程序。
使用新图片就复杂一点:
1,加载原图,同上。
2,预载大图:
_preload是预载对象,使用的是_loadPreload预载加载程序。
预载对象主要用来获取大图的原始尺寸,也是后面原图替换技巧的基础。
如果没有设置大图,说明当前没有设置大图也又没有放大比例,这时就用原图作为大图来用。
加载过程跟原图类似。
3,当原图加载完成时,执行_loadImage原图加载程序:
否则设置_loaded为true来标记原图已经加载,如果这时有自定义比例的话,先用原图替换大图。
因为一般大图加载会比较慢,先用原图替换就能立刻操作了,同时设置_substitute属性为true标记使用了替换。
4,当大图预载完成时,执行_loadPreload大图预载程序:
如果原图没有加载完,那么设置_loaded为true标记大图已经加载。
关于图片加载还要注意一个问题,测试以下代码:
当加载完成后,就可以设置相关的对象和参数,这些都在_initLoaded程序中进行。
【加载设置】
在_initLoaded初始化加载设置程序,主要是做触发放大效果前的准备工作。
第一步,执行_initSize程序初始化显示图尺寸。
首先修正放大比例:
在图片加载时已经做好“安全措施”,确保这里能获得放大比例。
还可以通过自定义max和min属性来限制比例大小。
然后就可以按比例设置大图尺寸:
第二步,执行_initViewer初始化显示框程序,设置显示框。
先设置好样式:
第三步,执行_initData初始化数据程序,主要是设置放大时用到的一些参数。
包括用于位置判断的原图坐标:
范围参数就是要显示的范围在原图的尺寸,显示尺寸是显示框的显示尺寸。
如果通过rangeWidth和rangeHeight自定义了范围参数,就可以结合放大比例计算出显示尺寸:
如果显示框是display为none的隐藏状态,就不能直接获取clientWidth/clientHeight。
这种情况下,程序用以下方法获取:
1,记录display/position/visibility的原始值;
2,分别设为"block"/"absolute"/"hidden",这是既能隐藏也能占位的状态;
3,获取参数;
4,重新设回原始值,恢复原来的状态。
得到显示范围后,再配合比例就能得到范围参数了。
ps:这是通用的获取不占位元素尺寸参数的方法,jquery的css也是用这个方法获取width/height的。
比例计算后可能会得到小数,而尺寸大小只能是整数,程序一律使用Math.ceil来取整。
【放大效果】
所有东西都设置好后,就可以执行start设置触发程序了。
程序会自动执行start方法,里面主要是给原图对象的mouseover/mousemove绑定_start程序:
ps:如果使用attachEvent的话还要注意重复绑定同一函数的问题,这里的addEvent就没有这个问题。
绑定的_start程序,主要是进行一些事件的解绑和绑定:
而mousemove绑定的_move移动程序,主要用来实现鼠标移动到哪里就放大哪里的功能。
为适应更多的情况(例如扩展篇的其他模式),把它绑定到document上,但也因此不能用mouseout事件来触发移出程序。
程序通过鼠标和原图的坐标比较,来判断鼠标是否移出原图对象范围:
如果鼠标在原图对象上移动,就计算坐标,并通过_repair程序把坐标转化成定位需要的值。
最后设置大图的left/top定位使显示框显示要放大的部位。
ps:我尝试过用scrollLeft/scrollTop来做定位,但发现这样在ie中会像锯齿那样移动,放得越大越明显,所以放弃。
【鼠标滚动缩放】
如果设置mouse属性为true,就会开启鼠标滚动缩放功能。
在执行放大效果期间,可以通过滚动鼠标滚轮对大图进行缩放处理。
其实就是根据滚轮动参数的变化来修改放大比例。
关于鼠标滚动事件,在slider中也提过,不过那时只分析了ie和ff的区别,这里再分析一下。
首先ie是用mousewheel绑定事件的,使用event的wheelDelta来获取滚动参数。
其他浏览器用以下代码测试:
ff:DOMMouseScroll:3_undefined
opera:mousewheel:3_-120
chrome/safari:mousewheel:0_-120
可以看到事件的绑定,ff只支持DOMMouseScroll,其他就只支持mousewheel。
而滚动参数的获取,ff只支持detail,opera两种都支持,chrome/safari就支持wheelDelta。
ps:不明白chrome/safari的detail为什么是0,有其他用途?
而DOMMouseScroll跟mousewheel还有一个不同是前者不能直接绑定元素,后者可以。
即可以elem.onmousewheel,但不能elem.onDOMMouseScroll。
根据以上分析,在_start程序里是这样把_mouse程序绑定到document的滚动事件中:
this.mouse && $$E.addEvent( document, $$B.firefox ? "DOMMouseScroll" : "mousewheel", this._MOUSE );
在_mouse程序里面根据滚动参数和自定义的rate缩放比率得到新的放大比例:
this._scale += ( e.wheelDelta ? e.wheelDelta / (-120) : (e.detail || 0) / 3 ) * this.rate;
修改比例时,程序参数也需要重新计算。
由于_rangeWidth/_rangeHeight会影响计算的过程,要重新恢复成自定义的默认值:
然后执行_initSize和_initData重新设置尺寸和参数,再执行_move重新定位。
最后记得用preventDefault防止触发页面滚动。
使用技巧
【图片设置】
程序支持大图使用原图放大或用新大图。
如果用新大图而且图片比较大的话,强烈建议设置放大比例,这样程序会自动在大图载入前先使用原图放大,这样就不用等待大图加载完成。
还要注意新大图本身的宽高比例要跟原图一致,否则就对不准坐标了,使用原图放大就没有这个问题。
【显示框设置】
有两个方法可以设置显示框的尺寸:
要固定显示范围的话,先设置rangeWidth/rangeHeight,程序会根据显示范围和放大比例计算显示框的尺寸;
要用显示框当前的尺寸来显示的话,只要不设置rangeWidth/rangeHeight或设为0就可以了。
【reset】
由于各个属性和对象之间有很多的关联,很多属性不能直接修改。
程序设置了一个reset方法专门用来修改这类属性的。
如果程序加载完成后又修改了影响程序计算的样式,例如原图大小,显示框大小等,也要执行一次reset来重新设置参数和属性。
【浮动定位】
程序没有设置显示框浮动定位的功能,需要的话可以自行添加。
简单的定位可以参考实例的方法,还要小心覆盖select的问题。
如果要更复杂的浮动定位,可以参考“浮动定位提示效果”。
【opera的bug】
测试中发现opera 10.10有两个bug。
分别是img元素设置透明时会看到背景图,用js修改鼠标样式会有问题。
不过这两个问题在10.50都已经修复了,还没升级的赶快升啦。
【maxthon的bug】
用maxthon 2.5.1测试时发现一个问题,测试以下代码:
一般来说用display隐藏后,clientWidth应该是0的,但maxthon貌似没有处理这个情况。
这会影响到程序中clientWidth的判断,不过对一般使用没什么影响。
我已经提交了这个问题,不知会不会处理。
使用说明
实例化时,必须有一个img元素作为原图对象,和一个容器作为显示框:
var iz = new ImageZoom( "idImage", "idViewer" );
可选参数用来设置系统的默认属性,包括:
属性: 默认值//说明
mode: "simple",//模式
scale: 0,//比例(大图/原图)
max: 10,//最大比例
min: 1.5,//最小比例
originPic: "",//原图地址
zoomPic: "",//大图地址
rangeWidth: 0,//显示范围宽度
rangeHeight:0,//显示范围高度
delay: 20,//延迟结束时间
autoHide: true,//是否自动隐藏
mouse: false,//鼠标缩放
rate: .2,//鼠标缩放比率
onLoad: $$.emptyFunction,//加载完成时执行
onStart: $$.emptyFunction,//开始放大时执行
onMove: $$.emptyFunction,//放大移动时执行
onEnd: $$.emptyFunction//放大结束时执行
其中模式的使用在下一篇扩展篇再说明。
初始化后,scale、max、min、originPic、zoomPic、rangeWidth、rangeHeight这些属性需要用reset方法来修改。
还提供了以下方法:
start:开始放大程序(程序会自动执行);
stop:停止放大程序;
reset:修改设置;
dispose:销毁程序。
已经加上!
谢谢支持!
一般用于放大查看商品图片,在凡客,京东商城,阿里巴巴等都有类似的效果。
好处是能在原图附近对图片进行局部放大查看,而且可以通过鼠标控制查看的部位。
这个程序有以下特点:
1,支持使用原图放大或新图片设置大图;
2,大图完成载入前使用原图放大代替,减少操作等待时间;
3,支持鼠标滚动缩放大图;
4,可以通过设置显示范围或显示框大小设置显示尺寸;
5,可以设置是否自动隐藏显示框;
6,支持插件形式的扩展来实现更多的功能(下一篇再详细介绍)。
兼容:ie6/7/8, firefox 3.6.2, opera 10.51, safari 4.0.4, chrome 4.1
前台效果预览
完整实例下载
程序说明
【基本原理】
首先要有一个img元素作为原图对象,还要有一个容器作为显示框。
显示框里面放另一个img元素作为大图对象,并根据比例设置好尺寸。
当鼠标在原图上移动时,通过对大图进行绝对定位来显示对应的部位,实现类似放大镜的效果。
【图片加载】
程序初始化时会先执行_initLoad程序,主要用来载入图片。
由于img在载入之前获取尺寸是不准确的,所以相关参数的计算都要等到图片加载之后。
有两种放大的方式:使用原图放大,和用已经放大的新图片。
原图放大的好处是只需加载一个图片,而使用新图片就可以得到更清晰的效果。
根据不同的方式,会选择对应的原图加载程序:
useOrigin = !this._zoomPic && this._scale,
loadImage = $$F.bind( useOrigin ? this._loadOriginImage : this._loadImage, this );
当没有设置大图但有放大比例时,会自动使用原图放大加载程序。
先看看使用原图放大加载的过程:
1,加载原图:
if ( originPic && originPic != image.src ) { image.onload = loadImage; image.src = originPic; } else if ( image.src ) { if ( !image.complete ) { image.onload = loadImage; } else { loadImage(); } } else { return; }
_originPic属性记录原图地址,如果设置了原图并且跟元素当前加载的图片不同,就设置onload并加载原图。
否则,如果元素当前有加载图片的话,先通过complete判断是否加载完成,没完成就设置onload,已经完成的话就直接执行加载程序。
最后,没有原图图片的话就退出程序。
2,执行_loadOriginImage加载程序:
this._image.onload = null; this._zoom.src = this._image.src; this._initLoaded();
由于ie6/7的gif图片载入bug,会先重置onload。
然后执行_initLoaded初始化加载设置程序。
使用新图片就复杂一点:
1,加载原图,同上。
2,预载大图:
var preload = this._preload, zoomPic = this._zoomPic || image.src, loadPreload = $$F.bind( this._loadPreload, this ); if ( zoomPic != preload.src ) { preload.onload = loadPreload; preload.src = zoomPic; } else { if ( !preload.complete ) { preload.onload = loadPreload; } else { this._loadPreload(); } }
_preload是预载对象,使用的是_loadPreload预载加载程序。
预载对象主要用来获取大图的原始尺寸,也是后面原图替换技巧的基础。
如果没有设置大图,说明当前没有设置大图也又没有放大比例,这时就用原图作为大图来用。
加载过程跟原图类似。
3,当原图加载完成时,执行_loadImage原图加载程序:
if ( this._loaded ) { this._initLoaded(); } else { this._loaded = true; if ( this._scale ) { this._substitute = true; this._zoom.src = this._image.src; this._initLoaded(); } }如果_loaded为true,说明大图已经加载,直接执行_initLoaded程序。
否则设置_loaded为true来标记原图已经加载,如果这时有自定义比例的话,先用原图替换大图。
因为一般大图加载会比较慢,先用原图替换就能立刻操作了,同时设置_substitute属性为true标记使用了替换。
4,当大图预载完成时,执行_loadPreload大图预载程序:
this._zoom.src = this._preload.src; if ( this._loaded ) { if ( !this._substitute ) { this._initLoaded(); } } else { this._loaded = true; }如果_loaded是true,说明原图已经加载完,同时_substitute为false即没有使用原图替换的话,就执行_initLoaded程序。
如果原图没有加载完,那么设置_loaded为true标记大图已经加载。
关于图片加载还要注意一个问题,测试以下代码:
<script> var img=new Image function test(){ img.onload=function(){alert("load")} img.src="http://www.google.com.hk/images/nav_logo8.png" } test() setTimeout(test,3000) </script>在chrome/safari只会弹出一次"load",而其他都是正常的两次,可能是做了优化之类的吧。
当加载完成后,就可以设置相关的对象和参数,这些都在_initLoaded程序中进行。
【加载设置】
在_initLoaded初始化加载设置程序,主要是做触发放大效果前的准备工作。
第一步,执行_initSize程序初始化显示图尺寸。
首先修正放大比例:
if ( !scale ) { scale = this._preload.width / image.width; } this._scale = scale = Math.min( Math.max( this._min, scale ), this._max );如果没有设置比例,就从预载对象获取的默认尺寸作为大图尺寸。
在图片加载时已经做好“安全措施”,确保这里能获得放大比例。
还可以通过自定义max和min属性来限制比例大小。
然后就可以按比例设置大图尺寸:
zoom.width = Math.ceil( image.width * scale ); zoom.height = Math.ceil( image.height * scale );
第二步,执行_initViewer初始化显示框程序,设置显示框。
先设置好样式:
var styles = { padding: 0, overflow: "hidden" }, p = $$D.getStyle( viewer, "position" ); if ( p != "relative" && p != "absolute" ){ styles.position = "relative"; }; $$D.setStyle( viewer, styles ); zoom.style.position = "absolute";再把显示图插入显示框:
if ( !$$D.contains( viewer, zoom ) ){ viewer.appendChild( zoom ); }
第三步,执行_initData初始化数据程序,主要是设置放大时用到的一些参数。
包括用于位置判断的原图坐标:
this._rect = $$D.rect( image );用于left/top修正的修正参数:
this._repairLeft = image.clientLeft + parseInt($$D.getStyle( image, "padding-left" )); this._repairTop = image.clientTop + parseInt($$D.getStyle( image, "padding-top" ));还有范围参数和显示尺寸。
范围参数就是要显示的范围在原图的尺寸,显示尺寸是显示框的显示尺寸。
如果通过rangeWidth和rangeHeight自定义了范围参数,就可以结合放大比例计算出显示尺寸:
rangeWidth = Math.ceil( rangeWidth ); rangeHeight = Math.ceil( rangeHeight ); this._viewerWidth = Math.ceil( rangeWidth * scale ); this._viewerHeight = Math.ceil( rangeHeight * scale ); $$D.setStyle( viewer, { width: this._viewerWidth + "px", height: this._viewerHeight + "px" });如果没有设置的话,就使用显示框的默认显示尺寸:
var styles; if ( !viewer.clientWidth ) { var style = viewer.style; styles = { display: style.display, position: style.position, visibility: style.visibility }; $$D.setStyle( viewer, { display: "block", position: "absolute", visibility: "hidden" }); } this._viewerWidth = viewer.clientWidth; this._viewerHeight = viewer.clientHeight; if ( styles ) { $$D.setStyle( viewer, styles ); } rangeWidth = Math.ceil( this._viewerWidth / scale ); rangeHeight = Math.ceil( this._viewerHeight / scale );注意,显示范围是通过clientWidth/clientHeight来获取的。
如果显示框是display为none的隐藏状态,就不能直接获取clientWidth/clientHeight。
这种情况下,程序用以下方法获取:
1,记录display/position/visibility的原始值;
2,分别设为"block"/"absolute"/"hidden",这是既能隐藏也能占位的状态;
3,获取参数;
4,重新设回原始值,恢复原来的状态。
得到显示范围后,再配合比例就能得到范围参数了。
ps:这是通用的获取不占位元素尺寸参数的方法,jquery的css也是用这个方法获取width/height的。
比例计算后可能会得到小数,而尺寸大小只能是整数,程序一律使用Math.ceil来取整。
【放大效果】
所有东西都设置好后,就可以执行start设置触发程序了。
程序会自动执行start方法,里面主要是给原图对象的mouseover/mousemove绑定_start程序:
var image = this._image, START = this._START; $$E.addEvent( image, "mouseover", START ); $$E.addEvent( image, "mousemove", START );分别对应移入原图对象和在原图对象上移动的情况。
ps:如果使用attachEvent的话还要注意重复绑定同一函数的问题,这里的addEvent就没有这个问题。
绑定的_start程序,主要是进行一些事件的解绑和绑定:
$$E.removeEvent( image, "mouseover", this._START ); $$E.removeEvent( image, "mousemove", this._START ); $$E.addEvent( document, "mousemove", this._MOVE ); $$E.addEvent( document, "mouseout", this._OUT );为了在移出窗口时能结束放大效果,给document的mouseout绑定了_OUT程序:
this._OUT = $$F.bindAsEventListener( function(e){ if ( !e.relatedTarget ) this._END(); }, this );当鼠标移出document会触发mouseout,如果当前relatedTarget是null的话,就延时执行_end结束程序:
var oThis = this, END = function(){ oThis._end(); }; this._END = function(){ oThis._timer = setTimeout( END, oThis.delay ); };在_end程序中,会先执行stop方法,在里面移除所有可能绑定的事件,再执行start方法继续等待触发。
而mousemove绑定的_move移动程序,主要用来实现鼠标移动到哪里就放大哪里的功能。
为适应更多的情况(例如扩展篇的其他模式),把它绑定到document上,但也因此不能用mouseout事件来触发移出程序。
程序通过鼠标和原图的坐标比较,来判断鼠标是否移出原图对象范围:
var x = e.pageX, y = e.pageY, rect = this._rect; if ( x < rect.left || x > rect.right || y < rect.top || y > rect.bottom ) { this._END(); } else { ... }如果鼠标移出原图对象的话,就执行_END结束放大效果。
如果鼠标在原图对象上移动,就计算坐标,并通过_repair程序把坐标转化成定位需要的值。
最后设置大图的left/top定位使显示框显示要放大的部位。
ps:我尝试过用scrollLeft/scrollTop来做定位,但发现这样在ie中会像锯齿那样移动,放得越大越明显,所以放弃。
【鼠标滚动缩放】
如果设置mouse属性为true,就会开启鼠标滚动缩放功能。
在执行放大效果期间,可以通过滚动鼠标滚轮对大图进行缩放处理。
其实就是根据滚轮动参数的变化来修改放大比例。
关于鼠标滚动事件,在slider中也提过,不过那时只分析了ie和ff的区别,这里再分析一下。
首先ie是用mousewheel绑定事件的,使用event的wheelDelta来获取滚动参数。
其他浏览器用以下代码测试:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <body style="height:1000px;"> <script> function test(e){ alert(e.type+":"+e.detail+"_"+e.wheelDelta) } document.addEventListener( "DOMMouseScroll", test, false ); document.addEventListener( "mousewheel", test, false ); </script> </body> </html>向下滚动一下,可以得到以下结果:
ff:DOMMouseScroll:3_undefined
opera:mousewheel:3_-120
chrome/safari:mousewheel:0_-120
可以看到事件的绑定,ff只支持DOMMouseScroll,其他就只支持mousewheel。
而滚动参数的获取,ff只支持detail,opera两种都支持,chrome/safari就支持wheelDelta。
ps:不明白chrome/safari的detail为什么是0,有其他用途?
而DOMMouseScroll跟mousewheel还有一个不同是前者不能直接绑定元素,后者可以。
即可以elem.onmousewheel,但不能elem.onDOMMouseScroll。
根据以上分析,在_start程序里是这样把_mouse程序绑定到document的滚动事件中:
this.mouse && $$E.addEvent( document, $$B.firefox ? "DOMMouseScroll" : "mousewheel", this._MOUSE );
在_mouse程序里面根据滚动参数和自定义的rate缩放比率得到新的放大比例:
this._scale += ( e.wheelDelta ? e.wheelDelta / (-120) : (e.detail || 0) / 3 ) * this.rate;
修改比例时,程序参数也需要重新计算。
由于_rangeWidth/_rangeHeight会影响计算的过程,要重新恢复成自定义的默认值:
var opt = this.options; this._rangeWidth = opt.rangeWidth; this._rangeHeight = opt.rangeHeight;
然后执行_initSize和_initData重新设置尺寸和参数,再执行_move重新定位。
最后记得用preventDefault防止触发页面滚动。
使用技巧
【图片设置】
程序支持大图使用原图放大或用新大图。
如果用新大图而且图片比较大的话,强烈建议设置放大比例,这样程序会自动在大图载入前先使用原图放大,这样就不用等待大图加载完成。
还要注意新大图本身的宽高比例要跟原图一致,否则就对不准坐标了,使用原图放大就没有这个问题。
【显示框设置】
有两个方法可以设置显示框的尺寸:
要固定显示范围的话,先设置rangeWidth/rangeHeight,程序会根据显示范围和放大比例计算显示框的尺寸;
要用显示框当前的尺寸来显示的话,只要不设置rangeWidth/rangeHeight或设为0就可以了。
【reset】
由于各个属性和对象之间有很多的关联,很多属性不能直接修改。
程序设置了一个reset方法专门用来修改这类属性的。
如果程序加载完成后又修改了影响程序计算的样式,例如原图大小,显示框大小等,也要执行一次reset来重新设置参数和属性。
【浮动定位】
程序没有设置显示框浮动定位的功能,需要的话可以自行添加。
简单的定位可以参考实例的方法,还要小心覆盖select的问题。
如果要更复杂的浮动定位,可以参考“浮动定位提示效果”。
【opera的bug】
测试中发现opera 10.10有两个bug。
分别是img元素设置透明时会看到背景图,用js修改鼠标样式会有问题。
不过这两个问题在10.50都已经修复了,还没升级的赶快升啦。
【maxthon的bug】
用maxthon 2.5.1测试时发现一个问题,测试以下代码:
<div id="t" style="width:50px;"></div> <script> var t=document.getElementById("t"); t.clientWidth; t.style.display="none"; alert(t.clientWidth); </script>
一般来说用display隐藏后,clientWidth应该是0的,但maxthon貌似没有处理这个情况。
这会影响到程序中clientWidth的判断,不过对一般使用没什么影响。
我已经提交了这个问题,不知会不会处理。
使用说明
实例化时,必须有一个img元素作为原图对象,和一个容器作为显示框:
var iz = new ImageZoom( "idImage", "idViewer" );
可选参数用来设置系统的默认属性,包括:
属性: 默认值//说明
mode: "simple",//模式
scale: 0,//比例(大图/原图)
max: 10,//最大比例
min: 1.5,//最小比例
originPic: "",//原图地址
zoomPic: "",//大图地址
rangeWidth: 0,//显示范围宽度
rangeHeight:0,//显示范围高度
delay: 20,//延迟结束时间
autoHide: true,//是否自动隐藏
mouse: false,//鼠标缩放
rate: .2,//鼠标缩放比率
onLoad: $$.emptyFunction,//加载完成时执行
onStart: $$.emptyFunction,//开始放大时执行
onMove: $$.emptyFunction,//放大移动时执行
onEnd: $$.emptyFunction//放大结束时执行
其中模式的使用在下一篇扩展篇再说明。
初始化后,scale、max、min、originPic、zoomPic、rangeWidth、rangeHeight这些属性需要用reset方法来修改。
还提供了以下方法:
start:开始放大程序(程序会自动执行);
stop:停止放大程序;
reset:修改设置;
dispose:销毁程序。
评论
4 楼
cloudgamer
2010-04-19
gstarwd 写道
难能可贵的是把设计思路写出来了 有条理。
但是代码加下 高亮吧?
但是代码加下 高亮吧?
已经加上!
3 楼
gstarwd
2010-04-18
难能可贵的是把设计思路写出来了 有条理。
但是代码加下 高亮吧?
但是代码加下 高亮吧?
2 楼
cloudgamer
2010-04-14
shijian0306 写道
很好,很不错的。用起来很舒服
谢谢支持!
1 楼
shijian0306
2010-04-13
很好,很不错的。用起来很舒服
发表评论
-
AlertBox 弹出层(信息提示框)效果
2010-10-11 11:06 1203弹出层就是相对文档或窗口定位的一个层,一般用来显示提示信息、广 ... -
JavaScript 图片3D展示空间(3DRoom)
2010-09-20 09:59 1345一般的平面效果,通过 ... -
ccs3/滤镜/canvas的图片旋转/缩放/翻转变换效果
2010-08-21 13:48 1649以前要实现图片的旋转或翻转,只能用ie的滤镜来实现,虽然can ... -
SlideView 图片滑动(扩展/收缩)展示效果
2010-07-30 08:52 1251滑动展示效果主要用在 ... -
ImageZoom 图片放大效果(扩展篇)
2010-04-16 21:32 1249上一篇ImageZoom已经对图片放大效果做了详细的分析,这次 ... -
图片延迟加载(按需加载)效果
2010-03-11 21:13 2854之前在做一个图片浏览效果时,要看后面的小图必须等到前面的加载完 ... -
Lazyload 延迟加载(缓载)效果
2010-02-22 09:58 1550Lazyload是通过延迟加载 ... -
JavaScript 图片滑动展示效果
2008-05-13 01:34 1715看到jQuery实例:图片展示效果后,我也想拿来试试,但我不太 ... -
JavaScript 图片变换效果(ie only)
2008-05-23 12:02 2307仿照常见的那个图片变换flash做的效果,纯js。不过滤镜变换 ... -
JavaScript 图片滑动切换效果
2008-07-06 01:25 3187序一(08/07/06) 看到alibaba的一个图片切换效 ... -
JavaScript blog式日历控件
2008-08-23 00:25 1064近来要做一个记事本系统,想找一个合适的日历控件,但网上的都是那 ... -
JavaScript Table排序
2008-10-06 08:24 1082程序的实现的是在客户 ... -
JavaScript 日期联动选择器
2008-10-28 10:30 1252一个日期联动选择器, ... -
JavaScript 拖拉缩放效果
2008-12-03 09:07 788拖拉缩放效果,实现通过鼠标拖动来调整层的面积(宽高)大小。例如 ... -
JavaScript 滑动条效果
2008-12-24 08:27 2495这个滑动条(拖动条) ... -
JavaScript Tween算法及缓动效果
2009-01-06 09:17 1182Flash做动画时会用到Tween类,利用它可以做很多动画效果 ... -
JavaScript 颜色梯度和渐变效果
2009-03-11 08:24 1070近来看了Dean的“Convert any colour va ... -
JavaScript Table行定位效果
2009-05-18 14:02 1034近来有客户要求用table显示一大串数据,由于滚动后就看不到表 ... -
JavaScript 浮动定位提示效果
2009-07-07 08:23 1119本来想做一个集合浮动 ... -
JavaScript 多级联动浮动菜单 (第二版)
2009-08-10 00:54 1848上一个版本(第一版请看这里)基本实现了多级联动和浮动菜单的功能 ...
相关推荐
总的来说,ImageZoom图片放大效果通过JavaScript和CSS实现了动态的图片放大功能,提升了用户的浏览体验。这种技术广泛应用于电子商务网站、产品展示页面以及任何需要放大查看细节的场合。在实际项目中,可以根据具体...
Cloudgamer出品的ImageZoom图片放大效果是该技术的一种实现,它具有多项特性,使得用户体验更加流畅和高效。 首先,Cloudgamer的ImageZoom支持两种放大模式:一种是利用原图直接放大,另一种则是加载单独的大图进行...
《ImageZoom图片放大镜效果详解》 在网页设计中,为用户提供良好的视觉体验至关重要,而图片放大镜效果正是实现这一目标的重要手段。本教程将详细探讨由cloudgamer出品的"ImageZoom图片放大镜效果",它是一款基于...
在给定的资源中,我们有三个文件:`ImageZoom.htm`、`ImageZoom 图片放大效果.html` 和 `CJL.0.1.min.js`。这些文件很可能是实现一个简单的HTML图片缩放功能的实例。 首先,`ImageZoom.htm` 和 `ImageZoom 图片放大...
在`ImageZoom 图片放大效果(扩展篇)- 程序说明.htm`中,可能详细解释了如何集成和使用这个扩展,包括配置选项、API接口以及可能遇到的问题和解决方法。开发者可能会介绍如何在自己的HTML页面中引入`ImageZoom.js`...
ImageZoom js库正是为了解决这一需求而诞生的,它提供了一种优雅的图片放大镜效果,让用户能够轻松地查看图片的细节。本文将深入探讨ImageZoom js的原理、实现方法以及如何将其应用于HTML5项目。 首先,ImageZoom ...
前一阵子看到sohighthesky的图片放大效果,心血来潮自己也写一个看看。 这个程序有以下特点: 1,支持使用原图放大或新图片设置大图; 2,大图完成载入前使用原图放大代替,减少操作等待时间; 3,支持鼠标滚动缩放...
《ImageZoom图片放大镜效果的多功能扩展》 ImageZoom是一种常见的网页图片展示技术,它可以提供图片放大镜效果,使得用户可以更清晰地查看图片细节。在基础的ImageZoom功能之上,我们可以进行各种扩展以实现更多元...
当用户鼠标悬浮在图片上时,ImageZoom会将图片放大显示在一个浮动的层上,通常位于原图上方,这样用户就可以看到图片的细节部分。这个过程通常通过JavaScript和CSS来实现,其中JavaScript负责处理用户的交互事件,如...
在提供的压缩包文件"imageZoom"中,可能包含了实现图片放大效果的代码示例或资源。这个示例可能涵盖了上述的一些技术,例如Lanczos重采样算法的实现,或者是一个基于JavaScript的图片放大镜交互功能的代码。通过研究...
1. 构造函数:我们首先定义一个名为`ImageZoom`的构造函数,用于创建图片放大效果的对象。构造函数内部可以设置初始属性,如原始图片URL、放大图片URL、当前显示的图片索引等。 ```javascript function ImageZoom...
Cloudgamer JavaScript Library ...[ImageZoom 图片放大效果(扩展篇)] () [ImagesLazyLoad 图片延迟加载效果] () [Lazyload 延迟加载效果] () [JavaScript 图片上传预览效果] () [简便无刷新文件上传系统] () Read
JavaScript图片放大镜效果是一种常见的网页交互功能,常用于电商网站的商品展示,允许用户在鼠标悬停或点击图片时查看图片的细节部分。这种效果通过结合HTML、CSS和JavaScript技术实现,为用户提供更好的视觉体验。 ...
在IT行业中,网页设计与用户体验是至关重要的,而"imagezoom:仿淘宝图片放大效果"是一种常见的提升用户体验的技巧。这种技术允许用户在查看产品图片时,能够对商品的细节部分进行放大,从而获得更清晰的视图,提高...
首先,我们来看看`ImageZoom.htm`,这可能是实现图片放大效果的HTML文件。HTML文件中,我们需要包含图片元素 `<img>`,并且可能通过CSS设置初始的显示样式,如尺寸和位置。例如: ```html 示例图片"> ``` 接着,`...