`
cloudgamer
  • 浏览: 61019 次
  • 性别: Icon_minigender_1
  • 来自: 顺德
社区版块
存档分类
最新评论

AlertBox 弹出层(信息提示框)效果

阅读更多
弹出层就是相对文档或窗口定位的一个层,一般用来显示提示信息、广告等内容,还可以配合覆盖层来锁定页面。
仿Lightbox效果中,已经基本实现了这个效果,这次主要改进了ie6在fixed时的抖动问题。
此外,还增加了一个用来兼容ie6的fixed的方法,覆盖层也重新“包装”,程序也改成组件的结构。
兼容:ie6/7/8, firefox 3.6.8, opera 10.6, safari 5.0.1, chrome 5.0



前台效果预览

完整实例下载


程序说明

【实现原理】

弹出层的基本原理在仿Lightbox效果中已经说的差不多了。
关键的地方就是定位,一般相对文档的定位用absolute就行了。
要随屏移动,即相对窗口定位,就用fixed定位。
这些实现起来都很简单,除了不支持fixed的ie6。


【兼容ie6的fixed】

由于ie6本身不支持fixed定位,只能模拟或取巧来间接实现。
最原始的方法是在window的scroll事件中不断修正弹出层的位置,像仿Lightbox效果那样。
后来有人发现还可以通过reflow“离奇”地实现
但以上方法都有一个缺陷,滚动时弹出层会“发抖”,很不舒服(可以用缓动等来改善)。

想要不发抖,可以通过html和css的巧妙应用来实现,具体参考14px的介绍
原理是用一个容器代替body,然后对不会动的body绝对定位。
看来很完美,但有一个致命的问题,这个方法需要修改html结构,会影响到相关的一些东西,例如window的scroll事件等。

程序中用了另一个方法,通过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>

以上代码能兼容ie6实现fixed,比较关键的是:
body的background-attachment必须是fixed;
把要fixed的元素设置绝对定位,并且用expression不断修正top/left。
具体原理我也不清楚,可能是body背景在fixed之后,会优先重绘expression的结果。
ps:expression里面必须用eval或加括号,才能不断触发运算(具体原因不明)。
关于这个方法的介绍可以看position: fixed in IE/win修正IE6不支持position:fixed的bug等。

相比前面的方法,这个是比较完美的了,但也有一些问题,例如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";
}

参考自DE的IE7.js,用"url(about:blank)"就不需要另外加图片。

再创建定位层:
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;'>");

由于窗口大小可能会改变,除了top/left外,width/height也需要用expression修正。

定位层还要设置"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中。
在不需要fixed的时候,要用remove方法从定位层中移除,当定位层内没有需要定位元素就会自动从body移除。
ps:隐藏的话expression还会继续执行,要移出文档才行。


【居中效果】

加入居中扩展程序,并且设置center为true,就会自动相对窗口居中。
居中的原理跟仿Lightbox效果是一样的,通过设置负的元素尺寸一半的margin和"50%"的top/left来居中。
要注意的是不是使用fixed定位时,计算需要加上scrollTop/scrollLeft。


【覆盖层】

在仿Lightbox效果中,ie6的覆盖层是通过创建一个覆盖整个页面的层来做的。
使用新的兼容fixed方法后,就不用另外做兼容,按照fixed的效果做就行了。
覆盖层是由AlertBox扩展而来,它其实就是一个大小跟窗口一样,并且跟窗口重合的弹出层。
由于覆盖层一般只需要定义一个就行了,这里把它做成一个OverLay对象,使用时直接调用它的show和close方法。


【遮盖select】

在仿Lightbox效果中介绍过两种遮盖select的方法:隐藏和iframe。
程序是通过iframe来遮盖的,放在ie6的兼容扩展程序中。
在iframe定位时要注意,要定位到弹出层的负的clientTop/clientLeft,这样才能保证边框不会被遮住。


使用技巧

【定位】

除了居中,程序会按照弹出层本身的定位样式来显示。
不是fixed定位时要注意,在ie6是相对当前窗口来定位的,其他都是相对第一屏窗口来定位的。
还要注意,必须声明DOCTYPE,才能正确定位。
程序为了尽量通用,降低了效率(用了4个expression),所以最好还是根据实际情况自己来调整。
ps:需要像定位提示效果那样预设定位的话,可以自行扩展。

【锁定键盘】

使用覆盖层时,为了防止用户通过键盘操作页面,可以在document的keydown中执行preventDefault来禁用。
如果弹出层需要正常操作,只要在弹出层的keydown中执行stopPropagation就行了。

【拖动弹窗】

这里只是简单的加上拖动功能,要注意的是fixed定位时,计算拖动的参考对象是不同的。
更详细的拖动介绍可以看看这个拖动效果


使用说明

实例化时,必须有弹出层作为参数:
new AlertBox("idBox");


可选参数用来设置程序的默认属性,包括:
属性:   默认值//说明
fixed: false,//是否固定定位
zIndex: 1000,//层叠数
onShow: $$.emptyFunction,//显示时执行
onClose: $$.emptyFunction//关闭时执行

还提供了以下方法:
show:显示弹出层;
close:隐藏弹出层;
dispose:销毁程序。

加入兼容ie6扩展程序后,会自动修正ie6的fixed问题,可根据fixSelect属性设置是否修正select遮盖bug,默认是。
加入居中扩展程序后,可根据center属性设置是否居中,默认否。

RepairFixed修正fixed对象,可独立使用,有append和remove方法添加和移除需要fixed的元素,只能在ie6使用。
OverLay覆盖层对象,有如下属性:
属性:   默认值//说明
"color": "#fff",//背景色
"opacity": .5,//透明度(0-1)
"zIndex": 100,//层叠值
还有show和close方法显示和隐藏覆盖层。
  • 大小: 13.7 KB
分享到:
评论
14 楼 arienya 2011-02-15  
有没有方法让窗口在触发它的按钮旁边弹出?
13 楼 arienya 2011-02-15  
是否应该加两个属性用于定位打开窗口相对于屏幕的位置。
12 楼 cloudgamer 2010-10-18  
tonywong205 写道
可惜不能遮罩住frameset中另外的网页,有谁有好的办法,麻烦通知我。谢谢~

放到最上层的页面中
11 楼 tonywong205 2010-10-17  
可惜不能遮罩住frameset中另外的网页,有谁有好的办法,麻烦通知我。谢谢~
10 楼 pengyanqing 2010-10-16  
楼车牛人啊..
9 楼 netbuddy 2010-10-15  
楼主JS大牛
8 楼 www88485400 2010-10-14  
挺好的 先打个标有空再看
7 楼 colver 2010-10-14  
e?  不熟悉这个网站  哈哈 居然把原文弄出来了  不好意思
6 楼 colver 2010-10-14  
cloudgamer 写道
弹出层就是相对文档或窗口定位的一个层,一般用来显示提示信息、广告等内容,还可以配合覆盖层来锁定页面。
仿Lightbox效果中,已经基本实现了这个效果,这次主要改进了ie6在fixed时的抖动问题。
此外,还增加了一个用来兼容ie6的fixed的方法,覆盖层也重新“包装”,程序也改成组件的结构。
兼容:ie6/7/8, firefox 3.6.8, opera 10.6, safari 5.0.1, chrome 5.0



前台效果预览

完整实例下载


程序说明

【实现原理】

弹出层的基本原理在仿Lightbox效果中已经说的差不多了。
关键的地方就是定位,一般相对文档的定位用absolute就行了。
要随屏移动,即相对窗口定位,就用fixed定位。
这些实现起来都很简单,除了不支持fixed的ie6。


【兼容ie6的fixed】

由于ie6本身不支持fixed定位,只能模拟或取巧来间接实现。
最原始的方法是在window的scroll事件中不断修正弹出层的位置,像仿Lightbox效果那样。
后来有人发现还可以通过reflow“离奇”地实现
但以上方法都有一个缺陷,滚动时弹出层会“发抖”,很不舒服(可以用缓动等来改善)。

想要不发抖,可以通过html和css的巧妙应用来实现,具体参考14px的介绍
原理是用一个容器代替body,然后对不会动的body绝对定位。
看来很完美,但有一个致命的问题,这个方法需要修改html结构,会影响到相关的一些东西,例如window的scroll事件等。

程序中用了另一个方法,通过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>

以上代码能兼容ie6实现fixed,比较关键的是:
body的background-attachment必须是fixed;
把要fixed的元素设置绝对定位,并且用expression不断修正top/left。
具体原理我也不清楚,可能是body背景在fixed之后,会优先重绘expression的结果。
ps:expression里面必须用eval或加括号,才能不断触发运算(具体原因不明)。
关于这个方法的介绍可以看position: fixed in IE/win修正IE6不支持position:fixed的bug等。

相比前面的方法,这个是比较完美的了,但也有一些问题,例如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";
}

参考自DE的IE7.js,用"url(about:blank)"就不需要另外加图片。

再创建定位层:
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;'>");

由于窗口大小可能会改变,除了top/left外,width/height也需要用expression修正。

定位层还要设置"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中。
在不需要fixed的时候,要用remove方法从定位层中移除,当定位层内没有需要定位元素就会自动从body移除。
ps:隐藏的话expression还会继续执行,要移出文档才行。


【居中效果】

加入居中扩展程序,并且设置center为true,就会自动相对窗口居中。
居中的原理跟仿Lightbox效果是一样的,通过设置负的元素尺寸一半的margin和"50%"的top/left来居中。
要注意的是不是使用fixed定位时,计算需要加上scrollTop/scrollLeft。


【覆盖层】

在仿Lightbox效果中,ie6的覆盖层是通过创建一个覆盖整个页面的层来做的。
使用新的兼容fixed方法后,就不用另外做兼容,按照fixed的效果做就行了。
覆盖层是由AlertBox扩展而来,它其实就是一个大小跟窗口一样,并且跟窗口重合的弹出层。
由于覆盖层一般只需要定义一个就行了,这里把它做成一个OverLay对象,使用时直接调用它的show和close方法。


【遮盖select】

在仿Lightbox效果中介绍过两种遮盖select的方法:隐藏和iframe。
程序是通过iframe来遮盖的,放在ie6的兼容扩展程序中。
在iframe定位时要注意,要定位到弹出层的负的clientTop/clientLeft,这样才能保证边框不会被遮住。


使用技巧

【定位】

除了居中,程序会按照弹出层本身的定位样式来显示。
不是fixed定位时要注意,在ie6是相对当前窗口来定位的,其他都是相对第一屏窗口来定位的。
还要注意,必须声明DOCTYPE,才能正确定位。
程序为了尽量通用,降低了效率(用了4个expression),所以最好还是根据实际情况自己来调整。
ps:需要像定位提示效果那样预设定位的话,可以自行扩展。

【锁定键盘】

使用覆盖层时,为了防止用户通过键盘操作页面,可以在document的keydown中执行preventDefault来禁用。
如果弹出层需要正常操作,只要在弹出层的keydown中执行stopPropagation就行了。

【拖动弹窗】

这里只是简单的加上拖动功能,要注意的是fixed定位时,计算拖动的参考对象是不同的。
更详细的拖动介绍可以看看这个拖动效果


使用说明

实例化时,必须有弹出层作为参数:
new AlertBox("idBox");


可选参数用来设置程序的默认属性,包括:
属性:   默认值//说明
fixed: false,//是否固定定位
zIndex: 1000,//层叠数
onShow: $$.emptyFunction,//显示时执行
onClose: $$.emptyFunction//关闭时执行

还提供了以下方法:
show:显示弹出层;
close:隐藏弹出层;
dispose:销毁程序。

加入兼容ie6扩展程序后,会自动修正ie6的fixed问题,可根据fixSelect属性设置是否修正select遮盖bug,默认是。
加入居中扩展程序后,可根据center属性设置是否居中,默认否。

RepairFixed修正fixed对象,可独立使用,有append和remove方法添加和移除需要fixed的元素,只能在ie6使用。
OverLay覆盖层对象,有如下属性:
属性:   默认值//说明
"color": "#fff",//背景色
"opacity": .5,//透明度(0-1)
"zIndex": 100,//层叠值
还有show和close方法显示和隐藏覆盖层。

5 楼 colver 2010-10-14  
很强  先保存下地址 
4 楼 liushihua71632 2010-10-13  
很好,学习了!
3 楼 binlaniua 2010-10-13  
JS牛人 又来了。。。
2 楼 kjj 2010-10-13  
做得不错,我用的是blockui
1 楼 libmw 2010-10-12  
牛人又出新东西了啊!祝贺下下^^

相关推荐

    AlertBox 弹出层信息提示框效果实现步骤

    【AlertBox弹出层信息提示框效果实现】在前端开发中,AlertBox是一种常见的交互设计元素,用于向用户展示信息提示、警告或者确认对话框。本文将详细解析AlertBox的实现原理及其在不同浏览器下的兼容性处理,特别是...

    AlertBox 弹出层 实例(多种)

    本实例集包含了多种AlertBox弹出层的应用,包括悬对联广告、右下弹窗、拖动弹窗以及居中定位等效果,旨在帮助开发者实现丰富的交互体验。 首先,我们来看“悬对联广告”这一功能。悬对联广告通常是指在页面边缘悬浮...

    几种网页弹出层的实例

    在网页开发中,弹出层可以是模态窗口(Modal)、非模态窗口(Non-modal)或者简单的提示框。这些实例可以帮助开发者更好地理解和实现各种弹出层效果。 1. 带遮罩层的弹出层: 遮罩层通常用于创建一个半透明的背景...

    精美网页弹出层大全

    网页弹出层是网页设计中常见的一种交互元素,主要用于显示重要的信息、提示、警告或进行交互操作。在“精美网页弹出层大全”这个资源包中,包含了多种不同风格和功能的弹出层实现,主要涉及到的技术有JavaScript(JS...

    jQuery点击弹出提示框代码

    在本示例中,“jQuery点击弹出提示框代码”是一个利用jQuery实现的功能,当用户点击某个元素(例如购买按钮)时,会显示一个遮罩层,并在其中弹出一个提示框,告诉用户商品已售罄。这个功能对于电子商务网站来说非常...

    jquery 弹出层效果

    在本主题中,我们将深入探讨如何使用 jQuery 实现弹出层效果,包括警报对话框、确认对话框以及自定义的警告框。 1. **jQuery 警报对话框**: jQuery 不直接提供标准的 `alert()` 对话框,但可以通过模拟实现。通过...

    js弹出自定义层

    在网页中,弹出层通常是一个覆盖在原有页面上的浮动元素,它可以是警告提示、模态对话框或者自定义的内容容器。这些弹出层在用户与页面交互时出现,然后在完成其目的后消失。 实现js弹出层的方法多种多样,但通常...

    弹出警告框

    在网页开发中,提示用户信息或者进行交互确认是不可或缺的一部分,而警告框(Alert Box)是一种常见的用户界面元素。在给定的标题“弹出警告框”和描述中,我们可以理解这是一个关于使用CSS和JavaScript来实现自定义...

    js提示框(模仿QQ控件的提示消息框)

    例如,`alertBox('消息内容', '警告')`可以弹出一个带有指定内容和类型的警告框。 6. **扩展性**:优秀的提示框组件还应该具备良好的扩展性,允许开发者自定义样式、添加额外的功能,甚至可以与其他库(如Bootstrap...

    jquery弹出代码、div弹出代码

    - CSS样式的应用,如设置position、z-index等属性,以确保弹出层在页面上的正确位置和层级关系。 - 可能还包含了如何关闭弹出层的代码,例如,通过再次点击或点击指定按钮来隐藏弹出层。 学习和理解这些代码,...

    jquery写的弹出消息提示并带遮罩效果

    在IT行业中,jQuery是一个广泛使用的JavaScript库,...这种弹出提示框常用于通知用户、确认操作或展示错误信息,是Web应用中常用的功能之一。通过熟练掌握这些技能,开发者可以创建更加互动和用户友好的网页应用程序。

    javascript实现仿新浪信息提示效果

    在页面上,你需要一个遮罩层元素和一个用于展示信息的弹出框元素。例如: ```html ;"&gt; &lt;div id="alertBox" style="display:none;"&gt; &lt;!-- 这里放置提示信息 --&gt; 关闭 ``` 接下来,我们用CSS来设置样式,特别...

    CJL.js:Cloudgamer JavaScript 库

    [AlertBox 弹出层(信息提示框)效果] () [JavaScript 图片3D展示空间(3DRoom)] () [图片(旋转/缩放/翻转)变换效果(ccs3/滤镜/canvas)] () [SlideView 图片滑动(扩展/收缩)展示效果] () [ImageZoom 图片放大效果...

    C#前台js弹出框样式css

    这段CSS代码将使弹出框居中显示,具有白色背景、灰色边框、阴影效果以及较高的z-index,确保弹出框始终在其他元素之上。 接着,我们可以用JavaScript来控制这个自定义弹出框的显示和隐藏。例如,使用jQuery库,我们...

Global site tag (gtag.js) - Google Analytics