关于 ajaxToolkit:ModalPopupExtender 弹出窗口在IE弹出时“游走”的问题。

                        关于 ajaxToolkit:ModalPopupExtender 弹出窗口在IE弹出时“游走”的问题。

 

    这个问题我感觉不算是个bug,但是项目经理要我改。。。悲剧!

 

    大致看一下这个问题,大概(我)是IE浏览器解析的原因, 弹出窗口弹出可以分为两个步骤:1.通过计算让弹出窗口在浏览器中间显示。2.

 

显示弹出窗口。

 

     IE可能多线程吧,在第一步还没有计算好的情况下,第二部就开始执行了。(FF下就没有这个问题)。

 

     最后想到了一个办法(之前想了很多,这个办法不行就放弃了,呵呵)

 

    1。就是将弹出窗口内加一次div,IE还在计算将弹出窗口在浏览器中间显示时,我先将这个div显示出来,然后再0.1后,将我计算出来的位

 

置去掉,这样是为了弹出窗口还能拖动。

 

 

    于是我就想办法将加的div如何在浏览器中间显示,第一是css,要用到position,top,left。

 

      1.查了position的属性:这个属性定义建立元素布局所用的定位机制。

 

 

   值描述
absolute

生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。

元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

fixed

生成绝对定位的元素,相对于浏览器窗口进行定位。

元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

relative

生成相对定位的元素,相对于其正常位置进行定位。

因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。

static默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
inherit规定应该从父元素继承 position 属性的值。

 

          最后确定fixed值,符合我的要求。

 

       2. 计算top和left的值,这个要获取浏览器的可见区域的高度和宽度。

 

 

 

//在IE、FireFox、Opera下都可以使用  
document.body.clientWidth  
document.body.clientHeight  
//即可获得,很简单,很方便。  
//而在公司项目当中:  
//Opera仍然使用  
document.body.clientWidth  
document.body.clientHeight  
//可是IE和FireFox则使用  
document.documentElement.clientWidth  
document.documentElement.clientHeight  
//原来是W3C的标准在作怪啊  
//http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
//如果在页面中添加这行标记的话  

//在IE中:  
document.body.clientWidth ==> BODY对象宽度  
document.body.clientHeight ==> BODY对象高度  
document.documentElement.clientWidth ==> 可见区域宽度  
document.documentElement.clientHeight ==> 可见区域高度  

//在FireFox中:  
document.body.clientWidth ==> BODY对象宽度  
document.body.clientHeight ==> BODY对象高度  
document.documentElement.clientWidth ==> 可见区域宽度  
document.documentElement.clientHeight ==> 可见区域高度  

?  
//在Opera中:   
document.body.clientWidth ==> 可见区域宽度  
document.body.clientHeight ==> 可见区域高度  
document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)  
document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)  
//而如果没有定义W3C的标准,则  
//IE为:  
document.documentElement.clientWidth ==> 0  
document.documentElement.clientHeight ==> 0  
//FireFox为:  
document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)  
//Opera为:  
document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)

 

 

最后选择了,document.documentElement.clientWidth
                  document.documentElement.clientHeight 

 

这是不断尝试的结果,呵呵!!!

 

 

       3.现在就是想如何居中公式了,其实很简单,稍微想一下就可以了。

 

           top:浏览器的可见区域高度-弹出窗口的高度/2

 

           left:同理; 

 

最后就搞定了,呵呵!!!

 

最后还是搞砸了,晕!!

     

       最后居然是这三句话就搞定了。。。。



        $("div[id='" + nameAll + "']").css("display", "none");
        window.setTimeout("", 100);
        $("div[id='" + nameAll + "']").fadeIn("normal");

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值