JQuery Dialog(JS 模态窗口,可拖拽的DIV)


Posted in Javascript onFebruary 07, 2010

效果图

JQuery Dialog(JS 模态窗口,可拖拽的DIV) 

 

调用示意图

JQuery Dialog(JS 模态窗口,可拖拽的DIV) 

交互示意图

JQuery Dialog(JS 模态窗口,可拖拽的DIV)
如上图所示,这基本是JQueryDialog的完整逻辑流程了。
1、用户点击模态窗口的“提交”按钮时,调用JQueryDialog.Ok()函数,这个函数对应了用户提交事件。

2、用OO的概念来说,JQueryDialog.Ok()其实是一个虚函数,它的逻辑封装在子窗口ContentWindow.Ok()中,这一点我借鉴了FCKEditor,如下代码所示:
JS代码

var JQueryDialog = { 
/// <summary>提交</summary> 
/// <remark></remark> 
Ok:function(){ 
var frm = $("#jd_iframe"); 
if (frm[0].contentWindow.Ok()){ 
JqueryDialog.Close() ; 
} 
else{ 
frm[0].focus() ; 
} 
} 
};

所以Iframe到Dialog的每个子页面必须定义函数Ok,以供父窗口调用,并返回true或false来通知父窗口Dialog是否关闭。
3、 通常在ContentWindow中会包含服务端的处理逻辑,这就需要通过POST与服务端交互,因为ContentWindow本身不包含"提交"按钮,所以如果要POST就必需在ContentWindow.Ok()中自己写submit()了。
4、最后,服务端逻辑执行完成,控制权需交回Dialog。于是我封装了JQueryDialog.SubmitCompleted(),其中包含三个参数供Dialog进行最后的逻辑处理:是否弹出消息以及消息内容,是否关闭Dialog,是否刷新父窗口。这个函数也得益于FCKEditor,如下所示:

JS代码

var JQueryDialog = { 
/// <summary>提交完成</summary> 
/// <param name="alertMsg">弹出提示内容,值为空不弹出</param> 
/// <param name="isCloseDialog">是否关闭对话框</param> 
/// <param name="isRefreshPage">是否刷新页面(关闭对话框为true时有效)</param> 
SubmitCompleted:function(alertMsg, isCloseDialog, isRefreshPage){ 
if($.trim(alertMsg).length > 0 ){ 
alert(alertMsg); 
} 
if(isCloseDialog){ 
JqueryDialog.Close(); 
if(isRefreshPage){ 
window.location.href = window.location.href; 
} 
} 
} 
};

5、结果响应,对用户呈现。

开发日志
JS的模态窗口在网上一抓就 是一大把了,参考了一些,最终还是决定把这个也纳入自己众多“原创工程”的其中之一,毕竟在WEB开发中窗口还是使用非常频繁的。从版本发布日志也可以看 出,这个东西修修补补也有一段时间了,基本现在还是一个初始的版本,但我会坚持不断把它完善下去,过程中有机会参考学习了JQuery、 Fckeditor等大型JS项目的框架,收益颇多;同时也再次体会了JS多浏览器兼容以及调试之苦,但又何妨?乐在其中。
谈谈项目的实现:首先基于浮动DIV。然后iframe子页面,使用iframe我想对于使用者和开发者来说均是最为便捷的,模态窗口的内容就是子页面内 容,模态窗口的切换就是子页面的切换,传入不同子页面URL地址即打开不同内容的模态窗口。确认了框架结构最后就是一些处理细节了,比如子页面的事件与模 态窗口关闭关联关系,这一点我从FCKEditor中获得巨大帮助,参考了它的实现,大家可在DEMO中查看详细代码;为了多浏览器兼容封装了一些公用 DOM 方法;添加了一些自定义配置,比如边框颜色,背景颜色。同时考虑到方便易用,全部使用CSS来实现效果,项目中未使用图片。
OK,正如前面所说,这是一个相对基础的版本,后面我会坚持不断的完善,欢迎大家使用和提出宝贵的建议。(吴剑,2009-06-01)
--------------------------------------------------------
最近做了一个项目,主要是基于客户端的,JQuery + JSON,写了近四千行JS代码。虽然项目未结项就转交了出去,但开始对JQuery产生了好感并爱不释手,于是决定将此项目正式更名为JQueryDialog。
本次更新将代码完全基于了JQuery框架,并应用了命名空间,让JS看起来有那么一点OO的感觉,同时修改了客户端的ID,加上jd_前缀以避免冲突, 修改了拖拽的核心函数,支持了多浏览器。最后在DEMO中添加了客户端与服务端的交互示例。欢迎大家下载使用。 (吴剑,2009-11-05)
-------------------------------------------------------
总觉得拖拽不够顺畅,决定要彻底解决这个问题了,这些天查了不少资料,终于发现了问题所在:因为使用了iframe,当鼠标移动到iframe上 时,mousemove event lost,大家可试用下DEMO,修改后现在的拖拽就完全顺畅了,并且索性我还分离出了一个DragAndDrop类,专门来实现拖拽。不得不再次感谢 FCKEditor的源代码,吸取了它的不少精华,前些天看新闻,FCKEditor重构了代码,推出MAC风格的CKEditor了,一直在研究 FCK,相信过段时间会写一篇FCKEditor源代码分析的文章。
OK,2.0.1版本主要优化了核心的拖拽,同时修复了Dialog location、Mouse style等bug,增加了自定义样式的配置项,优化了JQuery的缓存。(吴剑,2009-12-13)
-------------------------------------------------------
将JQuery升级为1.4 ,同时修复了事件注册的两处BUG。(吴剑,2010-01-18)
-------------------------------------------------------
为Open方法增加了内部扩展,修复了IE6下部分显示BUG。(吴剑,2010-02-03)

版本发布

JS代码
/*****************************************************************************
[作者]
吴剑 http://wu-jian.cnblogs.com/
[版本更新]
2009-06-01:版本1.0.1发布。
2009-07-05:版本1.0.2,更新了一些明显的BUG,完全支持了IE系列浏览器。
2009-08-15:版本1.0.3,封装了标准DOM,多浏览器下兼容,样式美化,添加了阴影效果。
2009-11-05:版本2.0.0,基于JQuery全新封装,应用了JS的命名空间,避免了客户端id冲突。
项目正式更名为JQuery Dialog,优化了拖拽的核心实现,完全支持跨浏览器。
2009-12-14:版本2.0.1,优化了核心的拖拽算法,分离出DragAndDrop类。
修复了鼠标拖动过快Dialog停顿的BUG。
修复了当Dialog宽或高大于页面时定位的BUG。
修复了鼠标样式与拖拽控制区不精确的BUG。
增加了配置项,JQuery缓存优化。
2010-01-18:版本2.0.2,JQuery升级为1.4。
2010-02-03:版本2.0.3,为Open()方法增加了内部扩展,修复IE6下部分显示BUG。
*****************************************************************************/
DEMO http://demo.3water.com/js/jquery_dialog/default.html
点击下载

Javascript 相关文章推荐
js阻止冒泡及jquery阻止事件冒泡示例介绍
Nov 19 Javascript
Js表格万条数据瞬间加载实现代码
Feb 20 Javascript
JS数组的常见用法实例
Feb 10 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
Nov 07 Javascript
Node.js操作Firebird数据库教程
Mar 04 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
Sep 01 Javascript
js 获取元素所有兄弟节点的实现方法
Sep 06 Javascript
iscroll.js滚动加载实例详解
Jul 18 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
Aug 12 Javascript
javascript 代码是如何被压缩的示例代码
May 06 Javascript
小程序实现背景音乐播放和暂停
Jun 19 Javascript
jquery 图片Silhouette Fadeins渐显效果
Feb 07 #Javascript
选择TreeView控件的树状数据节点的JS方法(jquery)
Feb 06 #Javascript
jquery 应用代码 方便的排序功能
Feb 06 #Javascript
jquery1.4后 jqDrag 拖动 不可用
Feb 06 #Javascript
javascript小数计算出现近似值的解决办法
Feb 06 #Javascript
jquery 插件实现图片延迟加载效果代码
Feb 06 #Javascript
Lazy Load 延迟加载图片的 jQuery 插件
Feb 06 #Javascript
You might like
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
让Firefox支持event对象实现代码
2009/11/07 Javascript
Extjs中常用表单介绍与应用
2010/06/07 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
Node.js编码规范
2014/07/14 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
np.random.seed() 的使用详解
2020/01/14 Python
Python使用xpath实现图片爬取
2020/09/16 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
深入浅析HTML5中的SVG
2015/11/27 HTML / CSS
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
大堂副理的岗位职责范文
2014/02/17 职场文书
公司门卫工作职责
2014/06/28 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电