2008-11-23 85 views
2

document.body.offsetWidth返回firefox中垂直滾動條左側到左側的內部寬度值。 在IE中它不是,而是從左側返回到垂直滾動條的右側。 有沒有人知道一個明智的方式,我可以做一個可靠的,如「var = offsetw;」爲offsetw是滾動條寬度我需要扣除以獲得像document.body.innerWidth值的Firefox? 繼承人我有。不同瀏覽器的document.body.offsetWidth變化

if (parseInt(navigator.appVersion)>3) { 
    if (navigator.appName=="Netscape") { 
     winW = 16; 
     winH = 16; 
    } 
    if (navigator.appName.indexOf("Microsoft")!=-1) { 
     winW = 20; 
     winH = 20; 
    } 
    if (navigator.appName.indexOf("Mozilla")!=-1){ 
     winW = 0; 
     winH = 0; 
    } 
} 

的Firefox目前使用16值,而不是由Mozilla宣稱線零,這表明它是錯誤的。

我是添加後或修復拿到winW和winH的滾動條爲每個瀏覽器的正確尺寸只有在這些瀏覽器不減去document.body.offsetWidth滾動條自動

感謝: )

回答

1

你試過一個JavaScript庫嗎?這是擺脫這些問題的最簡單方法。我推薦:jquery或YUI(雅虎用戶界面),其中所有東西都包裝在幾乎可以讓所有瀏覽器都兼容的代碼中。

除了這樣的考慮,在下面的頁面,你可以找到一個函數知道滾動條的寬度(我沒有測試):

http://www.alexandre-gomes.com/?p=115

http://javascript.jstruebig.de/javascript/70/

的代碼這(我不知道這是否是兼容所有的瀏覽器):

function scrollbarWidth() { 

    // Scrollbalken im Body ausschalten 

    document.body.style.overflow = 'hidden'; 

    var width = document.body.clientWidth; 



    // Scrollbalken 

    document.body.style.overflow = 'scroll'; 



    width -= document.body.clientWidth; 



    // Der IE im Standardmode 

    if(!width) width = document.body.offsetWidth-document.body.clientWidth; 



    // urspr?ngliche Einstellungen 

    document.body.style.overflow = ''; 



    return width; 

} 
+0

我也推薦jQuery。在那裏你可以使用$(document).width()或.height()以及dimensions-plugin offset()。left和offset()。top。 – powtac 2008-11-23 16:39:34

2

document.body.offsetWidth返回firefox中垂直滾動條從左側到左側的內部值。

不適合我,它不會返回與IE,Opera,Konqueror和Safari相同的值。示例代碼?

appName嗅探瀏覽器在最好的時候非常不可靠,無論如何也不會覆蓋它,因爲滾動條的大小受操作系統和用戶偏好的影響大於瀏覽器。相反,如果你想讀取'內部大小',使用clientWidth/clientHeight而不是offsetWidth/offsetHeight,或者用滾動條測量一個塊內部的偏移量。