javascript Demo模态窗口


Posted in Javascript onDecember 06, 2009

下面这个Demo支持回调,可以直接引用modalDialog.js使用,不存在任何Jquery的影子
global.js

window.js = new myJs(); //为了避免名称重复我们换个名称,附加一个myJs对像到window对象上,然后我们在页面中调用window.js 
//js对象 
function myJs() { 
this.x = 10; 
} 
//下面我们对myJs进行扩展 
myJs.prototype.alert = function (msg) { alert(msg); } //一个alert方法测试调用js.alert('弹出提示'); 
//获取制定Id的dom对象 
myJs.prototype.$ = function (id) { return document.getElementById(id); } 
myJs.prototype.bodyWidth = document.documentElement.clientWidth; 
myJs.prototype.bodyHeight = document.documentElement.clientHeight; 
myJs.prototype.body = document.body;

modalDialog.js 文件代码如下:
代码
//Modaldialog 
function modalDialog() { 
this.uri ="about:blank"; //地址 
this.title = null; //标题 
this.width = 400; //默认宽 
this.height = 300; //默认高 
this.borderColor = "black"; //边框颜色 
this.borderWidth = 2; //边框宽度 
this.callback = null; //回调方法 
this.background = "black"; 
this.titleBackground = "silver"; 
} 
modalDialog.prototype.url = this.uri; //这样不用扩展也是可以的但是在页面中只能提示找不到这个属性 
modalDialog.prototype.title = this.title; 
modalDialog.prototype.width = this.width; 
modalDialog.prototype.height = this.height; 
modalDialog.prototype.background = this.background; 
modalDialog.prototype.borderWidth = this.borderWidth; 
modalDialog.prototype.borderColor = this.borderColor; 
modalDialog.prototype.titleBackground = this.titleBackground; 
modalDialog.prototype.callback = this.callback; 
//触发回调方法 
modalDialog.prototype.call = function (callback) { if (callback != null) callback(this); if (this.callback != null) this.callback(); } 
//显示 
modalDialog.prototype.show = function () { 
var js = window.js; 
//在里面实现显示的细节 
var x = js.bodyWidth, y = js.bodyHeight; 
//先创建一个层遮罩整个body 
var zdiv = "zdiv"; //遮罩层id 
document.body.innerHTML += "<div id='" + zdiv + "' style='width:" + x + "px;height:" + y + "px;background-color:" + 
this.background + ";position:absolute;top:0;left:0;" + 
"filter:alpha(opacity=80);opacity:0.8;z-index:'></div>"; 
var mdiv = "mdiv"; //模态窗口层id 
document.body.innerHTML += "<div id='" + mdiv + "' style='width:" + this.width + "px;height:" + this.height + "px;" + 
"border:solid " + this.borderWidth + "px " + this.borderColor + ";z-index:20;position:absolute;top:" + 
(y - this.height) / 2 + ";left:" + (x - this.width) / 2 + ";'>" + 
//加上标题 
(this.title != null ? "<div style='background:" + this.titleBackground + ";line-height:30px;padding:0 10px;width:100%'>" + this.title + "</div>" : "") + 
"<div style='padding:1px;'><iframe src='" + this.uri + "' frameborder='0' scrolling='no' style='width:" + (this.width) + "px;height:" + 
(this.title != null ? this.height - 30 : this.height) + "px;'></iframe></div></div>"; 
} 
modalDialog.prototype.close = function () { 
document.body.removeChild(window.js.$("mdiv")); 
document.body.removeChild(window.js.$("zdiv")); 
}

default.html 页面上创建modalDialog
代码
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>模态窗口Demo</title> 
<!--下面这个js文件为我们的公共js文件--> 
<script type="text/javascript" src="global.js"></script> 
<!--ModalDialog UI js文件--> 
<script type="text/javascript" src="modaldialog.js"></script> 
<script type="text/javascript"> 
var md; //用于页面回调 
var uri = "/test.html"; 
function showModalDialog() { 
//处理打开模态窗口 
var m = new modalDialog(); 
m.uri = uri; 
m.title = "模态窗口"; 
m.background = "white"; 
m.borderColor = "orange"; 
m.borderWidth = 2; 
m.titleBackground = "gold"; 
m.callback = function () { m.close(); } 
// m.call(); 这个回调方法在modalDialog的Uri中调用 
m.show(); 
md = m; 
} 
</script> 
</style> 
</head> 
<body> 
<div> 
用javascript+css实现ModalDialog<br /> 
Jquery框架里面有个插件也可以实现这种效果,不过我们说的是自己实现 
<br /> 
<input id="btopenDialog" type="button" value="打点模态窗口!" onclick="showModalDialog()" /> 
</div> 
</body> 
</html>

在modalDialog页面中使用window.parent.md.call()触发回调函数
文件打包三水点靠木下载
Javascript 相关文章推荐
两个JavaScript jsFiddle JSBin在线调试器
Mar 14 Javascript
js arguments对象应用介绍
Nov 28 Javascript
Javascript MVC框架Backbone.js详解
Sep 18 Javascript
快速掌握Node.js环境的安装与运行方法
Feb 16 Javascript
AngularJs 60分钟入门基础教程
Apr 03 Javascript
jquery插件方式实现table查询功能的简单实例
Jun 06 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
Jul 25 Javascript
AngularJS教程之简单应用程序示例
Aug 16 Javascript
node.js的事件机制
Feb 08 Javascript
javascript过滤数组重复元素的实现方法
May 03 Javascript
vue如何截取字符串
May 06 Javascript
如何在vue中使用jointjs过程解析
May 29 Javascript
jquery select操作的日期联动实现代码
Dec 06 #Javascript
JSON 编辑器实现代码
Dec 06 #Javascript
JS 控制非法字符的输入代码
Dec 04 #Javascript
对采用动态原型方式无法展示继承机制得思考
Dec 04 #Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
Dec 04 #Javascript
javascript 跳转代码集合
Dec 03 #Javascript
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
Dec 03 #Javascript
You might like
用PHP函数解决SQL injection
2006/10/09 PHP
在PHP里得到前天和昨天的日期的代码
2007/08/16 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
php下获取http状态的实现代码
2014/05/09 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
extjs form textfield的隐藏方法
2008/12/29 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
Python解惑之True和False详解
2017/04/24 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
大学生学生会工作总结2015
2015/05/26 职场文书
CPU不支持Windows11系统怎么办
2021/11/21 数码科技
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers