【发布时间】:2010-09-18 23:47:47
【问题描述】:
我有一个使用滚动 div 来显示表格信息的网页。当窗口调整大小时(以及页面加载时),显示居中,div 的滚动条通过设置其宽度位于页面右侧。由于某种原因,Firefox 下的行为与 IE 下的行为不同。 IE 按预期定位/调整 div 的大小,但 firefox 似乎使它太宽,以至于当窗口客户端宽度达到大约 800px 时滚动条开始消失。我正在使用以下方法来设置位置和大小:
function getWindowWidth() {
var windowWidth = 0;
if (typeof(window.innerWidth) == 'number') {
windowWidth=window.innerWidth;
}
else {
if (document.documentElement && document.documentElement.clientWidth) {
windowWidth=document.documentElement.clientWidth ;
}
else {
if (document.body && document.body.clientWidth) {
windowWidth=document.body.clientWidth;
}
}
}
return windowWidth;
}
function findLPos(obj) {
var curleft = 0;
if (obj.offsetParent) {
curleft = obj.offsetLeft
while (obj = obj.offsetParent) {
curleft += obj.offsetLeft
}
}
return curleft;
}
var bdydiv;
var coldiv;
document.body.style.overflow="hidden";
window.onload=resizeDivs;
window.onresize=resizeDivs;
function resizeDivs(){
bdydiv=document.getElementById('bdydiv');
coldiv=document.getElementById('coldiv');
var winWdth=getWindowWidth();
var rghtMarg = 0;
var colHdrTbl=document.getElementById('colHdrTbl');
rghtMarg = parseInt((winWdth - 766) / 2) - 8;
rghtMarg = (rghtMarg > 0 ? rghtMarg : 0);
coldiv.style.paddingLeft = rghtMarg + "px";
bdydiv.style.paddingLeft = rghtMarg + "px";
var bdydivLft=findLPos(bdydiv);
if ((winWdth - bdydivLft) >= 1){
bdydiv.style.width = winWdth - bdydivLft;
coldiv.style.width = bdydiv.style.width;
}
syncScroll();
}
function syncScroll(){
if(coldiv.scrollLeft>=0){
coldiv.scrollLeft=bdydiv.scrollLeft;
}
}
请注意,我已经删除了其他设置高度的代码以及其他不相关的部分。全文可见here。如果你在IE和firefox中都去链接,调整宽度直到右上角的绿色框显示“800”,调整高度直到启用右侧的滚动条,你可以看到问题。如果您随后调整 IE 宽度,滚动条会保持不变,但如果您将 Firefox 宽度调整得更宽,滚动条就会开始消失。我不知道为什么会这样......
请注意,AFAIK,getWindowWidth() 应该是跨浏览器兼容的,但我不太确定 findLPos().... Firefox 的 DOM 或其他东西中可能有一个额外的对象,它正在改变结果? ?
【问题讨论】:
-
IE7,不过我觉得6里是一样的(未测试)
标签: javascript html internet-explorer firefox