AlertBox 弹出层信息提示框效果实现步骤 |
本文标签:AlertBox,弹出层 在仿Lightbox效果中,已经基本实现了这个效果,这次主要改进了ie6在fixed时的抖动问题 。 此外,还增加了一个用来兼容ie6的fixed的方法,覆盖层也重新“包装”,程序也改成组件的结构 。 兼容:ie6/7/8, firefox 3.6.8, opera 10.6, safari 5.0.1, chrome 5.0 效果预览 http://demo.jb51.net/js/AlertBox/index.htm 程序说明 【实现原理】 弹出层的基本原理在仿Lightbox效果中已经说的差不多了 。
由于ie6本身不支持fixed定位,只能模拟或取巧来间接实现 。 想要不发抖,可以通过html和css的巧妙应用来实现,具体参考14px的介绍 。 程序中用了另一个方法,通过body的背景和expression来实现,下面是一个兼容的fixed效果: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <style> body { _background: url(about:blank) fixed; } .fixable { position:fixed; top:100px; _position:absolute; _top:expression((document).documentElement.scrollTop+100); } </style> </head> <body style="height:1500px;"> <div class="fixable">fixable</div> </body> </html> 相比前面的方法,这个是比较完美的了,但也有一些问题,例如body的背景只能用fixed,使用expression资源消耗相对较大 。 更大的问题是不能实现用百分比值或right/bottom来定位 。 为了解决这个问题,程序使用了一个定位层,这个层用上面的方法实现fixed定位,尺寸跟窗口大小一样,并且位置重合,那么只要用一般的定位方法相对这个层定位,就能达到相对窗口定位的效果了 。 兼容程序主要在RepairFixed对象中,首先设置body背景: 复制代码 代码如下: if (body.currentStyle.backgroundAttachment !== "fixed") { if (body.currentStyle.backgroundImage === "none") { body.runtimeStyle.backgroundRepeat = "no-repeat"; body.runtimeStyle.backgroundImage = "url(about:blank)"; } body.runtimeStyle.backgroundAttachment = "fixed"; } 再创建定位层: 复制代码 代码如下: layer = document.createElement("<div style=position:absolute;border:0;padding:0;margin:0;overflow:hidden;background:transparent;top:expression((document).documentElement.scrollTop);left:expression((document).documentElement.scrollLeft);width:expression((document).documentElement.clientWidth);height:expression((document).documentElement.clientHeight);display:block;>"); 定位层还要设置"overflow:hidden",好处是不会因弹出层在document原来的范围外而自动扩大document 。 ie6测试以下代码,document会随着下滚而不断扩大: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <style> body { _background: url(about:blank) fixed; } .fixable { position:absolute; top:expression((document).documentElement.scrollTop+(document).documentElement.clientHeight); } </style> </head> <body> <div class="fixable">fixable</div> </body> </html> 加上"overflow:hidden"就可以防止这种情况 。 然后弹出层通过append方法修改为"absolute"定位,并插入到这个定位层,这样就能实现fixed效果了 。 由于这个定位层比较耗资源,所以在有元素插入时才会插到body中 。
加入居中扩展程序,并且设置center为true,就会自动相对窗口居中 。
在仿Lightbox效果中,ie6的覆盖层是通过创建一个覆盖整个页面的层来做的 。
在仿Lightbox效果中介绍过两种遮盖select的方法:隐藏和iframe 。
【定位】 除了居中,程序会按照弹出层本身的定位样式来显示 。 【锁定键盘】 使用覆盖层时,为了防止用户通过键盘操作页面,可以在document的keydown中执行preventDefault来禁用 。 【拖动弹窗】 这里只是简单的加上拖动功能,要注意的是fixed定位时,计算拖动的参考对象是不同的 。
实例化时,必须有弹出层作为参数: new AlertBox("idBox");
还提供了以下方法: 加入兼容ie6扩展程序后,会自动修正ie6的fixed问题,可根据fixSelect属性设置是否修正select遮盖bug,默认是 。 RepairFixed修正fixed对象,可独立使用,有append和remove方法添加和移除需要fixed的元素,只能在ie6使用 。 |