2012-08-08 19 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