document.body.offset不同浏览器的宽度变化

时间:2008-11-23 07:08:42

标签: javascript html

document.body.offsetWidth返回firefox中垂直滚动条从左侧到左侧的内部宽度值。 在IE中它没有,而是从左侧返回到垂直滚动条的右侧。 有没有人知道一种明智的方法,我可以做出一个可靠的方法,如“var = offsetw;” for offsetw是滚动条宽度我需要减去得到像fire.body.innerWidth值这样的firefox? 这是我拥有的。

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中减去滚动条

谢谢:)

2 个答案:

答案 0 :(得分:2)

  

document.body.offsetWidth返回firefox中垂直滚动条左侧到左侧的内部宽度值。

不是我没有,它返回与IE,Opera,Konqueror和Safari相同的值。示例代码?

通过appName嗅探浏览器在最好的情况下是非常不可靠的,并且在这种情况下不会覆盖它,因为滚动条的大小受操作系统和用户首选项的影响比浏览器更多。

相反,如果要读取“内部大小”,请使用clientWidth / clientHeight而不是offsetWidth / offsetHeight,或者使用滚动条测量内部块的offsetWidth。

答案 1 :(得分:1)

你试过一个javascript库吗?这是摆脱这些问题的最简单方法。我建议:jquery或YUI(Yahoo用户界面),其中所有内容都包含在几乎每个浏览器都兼容的类中。

除此之外,在以下页面中,您可以找到一个函数来了解滚动条的宽度(我还没有测试过):

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;

}