论坛首页 Web前端技术论坛

(5.16更新) MC Dialog 超酷js弹出层 完美兼容所有浏览器 华丽呈现超强功能

浏览 31772 次
精华帖 (3) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (10)
作者 正文
   发表时间:2010-05-01  
已修复网友提到的ie6下的相关问题

同时取消了闪烁提示功能 在支持了ie6半透明情况下 同时支持闪烁的话

在ie7+上绿色部分将变灰 考虑将闪烁提示修改成声音提示
0 请登录后投票
   发表时间:2010-05-03   最后修改:2010-05-03
首先感谢lz的无私分享。
我自己也写了个类似的东西在项目中使用,遇到一些问题,想跟lz讨论下,看看lz的组件是不是已经解决了。

其实这个东西的实现还是很简单的,我的做法是 div+iframe,这样可以做到遮盖iframe和select。在跨框架的问题上,我的做法是在window.top上实例化该js类,然后在自己的框架类上定义一个方法:

var xajax = {};
xajax.alert = function( text )
{
    if( window.top.dialogObject )
        window.top.dialogObject.alert( text );
    else
        alert( text ) ;
};


上面的代码很简单,就是所有需要alert的地方都调用xajax.alert,该方法自行判断顶层dialog组件是否可用,如果可用就调用dialog组件的alert方法,如果不可用,就调用window.alert方法。

实现上不难,难点在于模拟alert、confirm的阻塞行为,比如一段js验证失败的代码,我们要求提示信息之后自动把焦点置到验证失败的输入框上

传统写法:
if( username.getValue() == "" )
{
    alert( pageLocale.validate.username.failed ) ;
    username.focus() ;
};


如果用自己写的dialog组件,alert的时候显然是不能阻塞的。我目前的做法加了一个回调方法来做相同的事
xajax.alert = function( text, callback )
{
    ....
};

if( username.getValue() == "" )
{
    xajax.alert(
       pageLocale.validate.username.failed,
       function() { username.focus(); }
    );
};


但是总觉得这种方式很丑陋而且问题很大
  • 也有些情况是非阻塞不可的
  • confirm需要两个callback-ok跟cancel
  • 如果弹出的是个对话框,要处理returnValue,更麻烦


不知道lz是不是也考虑过这种情况,是怎么解决的。
0 请登录后投票
   发表时间:2010-05-03   最后修改:2010-05-03
plusir 写道
首先感谢lz的无私分享。
我自己也写了个类似的东西在项目中使用,遇到一些问题,想跟lz讨论下,看看lz的组件是不是已经解决了。

其实这个东西的实现还是很简单的,我的做法是 div+iframe,这样可以做到遮盖iframe和select。在跨框架的问题上,我的做法是在window.top上实例化该js类,然后在自己的框架类上定义一个方法:

var xajax = {};
xajax.alert = function( text )
{
    if( window.top.dialogObject )
        window.top.dialogObject.alert( text );
    else
        alert( text ) ;
};


上面的代码很简单,就是所有需要alert的地方都调用xajax.alert,该方法自行判断顶层dialog组件是否可用,如果可用就调用dialog组件的alert方法,如果不可用,就调用window.alert方法。

实现上不难,难点在于模拟alert、confirm的阻塞行为,比如一段js验证失败的代码,我们要求提示信息之后自动把焦点置到验证失败的输入框上

传统写法:
if( username.getValue() == "" )
{
    alert( pageLocale.validate.username.failed ) ;
    username.focus() ;
};


如果用自己写的dialog组件,alert的时候显然是不能阻塞的。我目前的做法加了一个回调方法来做相同的事
xajax.alert = function( text, callback )
{
    ....
};

if( username.getValue() == "" )
{
    xajax.alert(
       pageLocale.validate.username.failed,
       function() { username.focus(); }
    );
};


但是总觉得这种方式很丑陋而且问题很大
  • 也有些情况是非阻塞不可的
  • confirm需要两个callback-ok跟cancel
  • 如果弹出的是个对话框,要处理returnValue,更麻烦


不知道lz是不是也考虑过这种情况,是怎么解决的。

单纯实现解释执行(实现alert confirm的阻塞执行是很困难的 几乎无法实现)

模拟confirm目前都是这样做的 confirm一个确定 一个取消按钮 分别给他们绑定回调函数 来实现

自定义弹出层无法实现阻塞执行 虽然能做出来 但几乎无法封装好

比如 alert("abc");alert("der");将同时弹出两个alert对话框而不是确定之后再弹出另外一个

MC Dialog是将层创建到最顶级window对象dom中的

MC Dialog 是将系统自带的alert confirm方法覆盖了的 alert方法你只需要像以前一样调用即可 confirm方法必须带有至少一个参数 调用如confirm('你确定?',function(){//确定按钮方法},function(){//取消按钮方法}) //第二个第三个方法是不必须的 但是不带的话是同alert没有多大去别的 实际中还是要用

MC Dialog 已更新了 你可以看看代码 对你有帮助的话就最好了

也希望多多交流共同进步
0 请登录后投票
   发表时间:2010-05-04  
弹出的窗口关都关不掉

0 请登录后投票
   发表时间:2010-05-05  
kenchen0805 写道
弹出的窗口关都关不掉


不知道是什么浏览器? 貌似就没有浏览器会有关不掉这种情况

肯定是有什么脚本错误 但是我可以肯定的告诉你在我的演示界面 是没有问题的
5.1前演示页面在ff下有的问题但都不是MC Dialog本身的问题
0 请登录后投票
   发表时间:2010-05-06  
MC Dialog再次更新 修正拖拽在ff下的延迟和闪烁问题 请大家下载最新版

如果绝对开始的拖拽比较好的话 就不用更新了
0 请登录后投票
   发表时间:2010-05-07  
好像在IE8下面有内存泄露的问题,我每次往红色区域移动一下弹出一个框的时候内存基本上就得增加10M左右。第一次的时候没发现这个问题,结果我IE的内存就占到300M了。不知道是什么问题。
0 请登录后投票
   发表时间:2010-05-07  
更新了一下结果直接用IE8打开就报脚本错误。
0 请登录后投票
   发表时间:2010-05-07  
行: 81
错误: 'Dialog.Stock' 为空或不是对象
0 请登录后投票
   发表时间:2010-05-07  
bluesky4485 写道
行: 81
错误: 'Dialog.Stock' 为空或不是对象

对我也看了一下在ie8下确实有内存泄露的问题
这可能是新的拖拽方法造成的 因为最开始的拖拽放我测试过 内存占用在3m左右
每次关闭后内存会后在一半左右

更新?是你自己修改过?  如果你修改了我不敢保证 没有修改的话 是不会出现脚本错误的 这个我到目前为止运行正常 为出现脚步错误
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics