2012-08-08 20 views
1

我创建了一个弹出框类。每个弹出窗口都可以有一个可变内容,并根据光标在打开时的位置显示在可变位置,以便弹出窗口似乎从点击的链接或按钮中弹出。jquery outerWidth/Height在元素中衰落失败

问题是弹出菜单可能部分位于屏幕之外,如果光标太接近边界。要调整位置,我需要弹出的宽度和高度。

我尝试这样做:

$("#" + div_id).show(400);   

var off = $("#" + div_id).offset(); 
       var t = off.top; 
       var l = off.left; 
       var h = $("#" + div_id).outerHeight(); 

       var w = $("#" + div_id).outerWidth(); 

       var docH = $(document).height(); 
       var docW = $(document).width(); 
       alert("t = "+ t + ", h = " + h + ", w " + w + ", l "+ l + ", docH " + docH + ", docW " + docW); 
       if ((t + h) > docH) { 
        var h_diff = (t + h) - docH; //difference (how much is hidden?) 
        var new_top = Math.max(10, t - h_diff - 10); //move it of the needed amout + 10 margin (but don’t go further than 10 from top border) 
        $("#" + div_id).css("top", new_top); 
       } 
       if ((l+ w) > docW) { 
        var w_diff = (l + w) - docW; //difference (how much is hidden?) 
        var new_left = Math.max(10, l - w_diff - 10); //move it of the needed amout + 10 margin 
        $("#" + div_id).css("left", new_left); 
       } 

的问题是,outerWidth()和outerHeight做失败,实际上,因为自从我用的是动画版节目(的),检索到的高度和宽度是最小的。我很确定这是原因,因为如果我立即显示div,所有东西都可以工作。此外,添加警报以查看发生了什么,我发现只有在动画警报(并且警报显示最小宽度和重量)后弹出窗口才会出现,而如果不在show()上添加持续时间首先显示警报框,显示正确的值。

任何想法?

回答

0

由于您已经在使用jQuery,因此您可以使用.poisition()方法来完成您正在尝试执行的操作。 http://jqueryui.com/demos/position/

希望这有助于

+0

谢谢你的提示,然而,这并不解决问题的地方,以根据尺寸定位,因为那是我不能得到。 – DavidTonarini 2012-08-13 10:09:23

+0

位置方法具有“碰撞”属性,当设置为“翻转”时,它会自动确定您显示的元素是否部分位于页面外,并且会“翻转”其位置,以便始终显示。 – Jay 2012-08-15 14:18:03

+0

好的!谢谢 – DavidTonarini 2012-08-17 11:03:41