纯JavaScript实现的完美渐变弹出层效果代码


Posted in Javascript onApril 02, 2010

如题,本文将使用纯粹的脚本JavaScript实现渐变的弹出层,其想法也非常简单:利用IFrame实现遮盖,再借助一个DIV用于展现弹出层的内容,最后再使用其内置函数setInterval()和clearInterval()实现渐变,原理非常简单,只不过要注意对DOM对象/元素的精确控制。由于代码比较简单,在此就不再赘述。以下代码在IE6+,FF3.5+测试通过。
脚本Flyout.js:

// JScript File 
if (navigator.userAgent.toLowerCase().indexOf('msie') > -1) { 
window.isIE = true; 
window.isIE6 = navigator.appVersion.indexOf("MSIE 6.0;") > -1; 
window.isIE7 = navigator.appVersion.indexOf("MSIE 7.0;") > -1; 
window.isIE8 = navigator.appVersion.indexOf("MSIE 8.0;") > -1; 
} 
var $ = function(objID) { return document.getElementById(objID) }; 
var _flyout; 
var _fadeTimer; 
function showflyout(divWidth, divHeight, paddingWidth) { 
var flyout = function() { 
} 
flyout.prototype = { 
clientWidth: document.documentElement.clientWidth, 
clientHeight: document.documentElement.clientHeight, 
scrollWidth: document.documentElement.scrollWidth, 
scrollHeight: document.documentElement.scrollHeight, 
iframeID: "envelopIframe", 
divID: "popupcontent", 
iframebgColor: "#888888", 
show: function(divContent) { 
//Create envelop iframe 
cssText = "position:absolute; z-index:100; background-color:#888888; border-width:0px; filter:alpha(opacity=0); opacity:0.0;"; 
cssText += "left:0px;"; 
cssText += "top:0px;"; 
cssText += "width:" + this.scrollWidth + "px;"; 
cssText += "height:" + this.scrollHeight + "px;"; 
this.create("iframe", this.iframeID, cssText, "Cppl_IFrameSrc.htm", ""); 
_fadeTimer = setInterval(function() { fadeIframe("envelopIframe", 0.05, 0, 0.5, true) }, 5); 
//Create flyout 
var cssText = ""; 
cssText += "display:block; _position:absolute; position:fixed; z-index:101; border:solid 1px Gray; background-color:white;"; 
cssText += "left:" + (this.clientWidth - divWidth - paddingWidth) / 2 + "px;"; 
cssText += "top:" + (this.clientHeight - divHeight - paddingWidth) / 2 + "px;"; 
cssText += "width:" + (divWidth + paddingWidth) + "px;"; 
cssText += "height: " + (divHeight + paddingWidth) + "px;"; 
this.create("div", this.divID, cssText, "", divContent); 
}, 
create: function(type, id, csstext, iframesrc, innerhtml) { 
var obj = document.createElement(type); 
if (iframesrc.length > 0) { 
obj.src = iframesrc; 
} 
obj.setAttribute("id", id); 
obj.style.cssText = csstext; 
if (innerhtml.length > 0) { 
obj.innerHTML = innerhtml; 
} 
document.body.appendChild(obj); 
if (iframesrc.length > 0) { 
if (window.isIE) { 
window.envelopIframe.document.bgColor = this.iframebgColor; 
} 
} 
}, 
close: function() { 
var objIframe = document.getElementById(this.iframeID); 
var objDiv = document.getElementById(this.divID); 
if (objIframe && objDiv) { 
document.body.removeChild(objIframe); 
document.body.removeChild(objDiv); 
} 
}, 
onresize: function() { 
var objIframe = document.getElementById(this.iframeID); 
var objDiv = document.getElementById(this.divID); 
if (objIframe && objDiv) { 
objIframe.style.width = document.documentElement.scrollWidth + "px"; 
objIframe.style.height = document.documentElement.scrollHeight + "px"; 
objDiv.style.left = (document.documentElement.clientWidth - divWidth) / 2 + "px"; 
objDiv.style.top = (document.documentElement.clientHeight - divHeight) / 2 + "px"; 
} 
}, 
onscroll: function() { 
var objDiv = document.getElementById(this.divID); 
if (objDiv) { 
objDiv.style.left = (document.documentElement.clientWidth - divWidth) / 2 + document.documentElement.scrollLeft + "px"; 
objDiv.style.top = (document.documentElement.clientHeight - divHeight) / 2 + document.documentElement.scrollTop + "px"; 
} 
} 
}; 
_flyout = new flyout(); 
_flyout.show("This is a flyout.<div onclick=\"javascript:closeflyout()\">Close Flyout</div>"); 
} 
function closeflyout() { 
clearInterval(_fadeTimer); 
_fadeTimer = setInterval(function() { fadeIframe("envelopIframe", 0.05, 0, 0.5, false) }, 5); 
} 
window.onresize = function() { 
if (_flyout) { 
_flyout.onresize(); 
} 
}; 
window.onscroll = function() { 
if (_flyout && isIE6) { 
_flyout.onscroll(); 
} 
}; 
function fadeIframe(objId, speed, minOpacity, maxOpacity, flag) { 
var dialog = $(objId); 
if (dialog) { 
var value; 
if (flag) { 
if (parseFloat(dialog.style.opacity) <= maxOpacity) { 
value = parseFloat(dialog.style.opacity) + speed; 
dialog.style.filter = 'alpha(opacity=' + value * 100 + ')'; 
dialog.style.opacity = '' + value + ''; 
} 
else { 
clearInterval(_fadeTimer); 
} 
} 
else { 
if (parseFloat(dialog.style.opacity) >= minOpacity) { 
value = parseFloat(dialog.style.opacity) - speed; 
dialog.style.filter = 'alpha(opacity=' + value * 100 + ')'; 
dialog.style.opacity = '' + value + ''; 
} 
else { 
clearInterval(_fadeTimer); 
if (_flyout) { 
_flyout.close(); 
} 
} 
} 
} 
}

调用ASPX代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
<title>Flyout Sample</title> 
<script type="text/javascript" src="Flyout.js"></script> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
<div onclick="javascript:showflyout(700, 300, 10);"> 
Click me to test 
</div> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
</div> 
</form> 
</body> 
</html>

最终效果图:
纯JavaScript实现的完美渐变弹出层效果代码
Javascript 相关文章推荐
javascript Onunload与Onbeforeunload使用小结
Dec 31 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
用JS将搜索的关键字高亮显示实现代码
Nov 08 Javascript
理解javascript中的回调函数(callback)
Sep 02 Javascript
JavaScript中的值类型转换介绍
Dec 31 Javascript
Javascript基础教程之数组 array
Jan 18 Javascript
JS 实现可停顿的垂直滚动实例代码
Nov 23 Javascript
vue.js利用Object.defineProperty实现双向绑定
Mar 09 Javascript
JavaScript数据结构之二叉树的删除算法示例
Apr 13 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
Aug 19 Javascript
微信小程序中使用wxss加载图片并实现动画效果
Aug 13 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
Nov 04 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
Apr 02 #Javascript
获取焦点时,利用js定时器设定时间执行动作
Apr 02 #Javascript
Javascript 类与静态类的实现(续)
Apr 02 #Javascript
用js实现计算加载页面所用的时间
Apr 02 #Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
Apr 02 #Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
Apr 02 #Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
Apr 02 #Javascript
You might like
PHP 类商品秒杀计时实现代码
2010/05/05 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
XMLHTTPRequest的属性和方法简介
2010/11/23 Javascript
IE图片缓存document.execCommand(&quot;BackgroundImageCache&quot;,false,true)
2011/03/01 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
js实现人才网站职位选择功能的方法
2015/08/14 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
Knockoutjs 学习系列(二)花式捆绑
2016/06/07 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
vue 解决异步数据更新问题
2019/10/29 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
快速入手Python字符编码
2016/08/03 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python3远程监控程序的实现方法
2019/07/15 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
离婚案件上诉状
2015/05/23 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技