2010-10-22 60 views
1

我创建了一个灯箱脚本。一个JavaScript问题仍然存在,这让我发疯。元素高度在IE6中呈现之前未知;怎么解决?

源是http://github.com/Wolfr/Wolf-lightbox

在IE6中,当你点击图像,模态盒位置不对您第一次点击的模式可寻。如果关闭它并再次单击它,则模式正确定位。

我相信这是由于IE6不知道插入图像的尺寸。例如。登录第一次modalHeight它可能是像51,下一次500(模态已经“长大”,因为在它的图像现在“)。

任何人有任何想法?困在这里!

function positionBox() { 

    // initialize object references 
    var oElement = $('.modal'); 
    var oWindow = $(window); 

    // calculate offset 
    var offsetLeft = parseInt((oWindow.width() - oElement.width())/2); 
    var offsetTop = parseInt((oWindow.height() - oElement.height())/2); 

    var modalWidth = parseInt(oElement.width()); 
    var modalHeight = parseInt(oElement.height()); 

    oElement.css('left', offsetLeft) 
    .css('top', offsetTop) 
    .css('width', modalWidth) 
    .css('height', modalHeight) 
    .css('position', 'fixed'); 

    // IE6 should use position: absolute; since fixed is not supported 
    if($.browser.msie && $.browser.version =='6.0') { 
    oElement.css('position', 'absolute') 
      .css('top', offsetTop + oWindow.scrollTop()); 
    } 

} 
+0

你认为只是让IE6用户受苦? ;-) – Spudley 2010-10-22 13:56:14

回答

3

你可以尝试创建的元素你想大小的屏幕外(即position:absolute; left:-10000px),做你的偏移Calcs(计算),然后将其移回在屏幕上。

+0

+ 1用于“左外”技术 – 2010-10-22 13:55:44

0

另一种选择是做一个$img.bind("load", ...)成立回调在图像加载时重新绘制窗口,但是,当图像已经被缓存时,IE的行为有些奇怪,并且加载回调函数n曾经发生过火灾。你需要做的事情如


$img.bind("load", function() { 
    redraw(); 
}); 

if ($.browser.msie) { 
    if ($img[0].complete) { 
    redraw(); 
    } 
}