У меня есть веб-страница, которая использует прокручиваемый div для отображения информации таблицы. При изменении размера окна (а также при загрузке страницы) дисплей центрируется, а полоса прокрутки элемента div располагается справа от страницы путем установки его ширины. По некоторым причинам, поведение под Firefox отличается от IE. IE позиционирует / изменяет размер div, как и ожидалось, но Firefox, кажется, делает его слишком широким, так что полоса прокрутки начинает исчезать, когда ширина окна клиента достигает около 800 пикселей. Я использую следующие методы для установки позиции и размера:
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;
}
}
Обратите внимание, что я вырезал другой код, который устанавливает высоту, и другие не относящиеся к делу части. Полную страницу можно увидеть здесь . Если вы перейдете по ссылке в IE и Firefox, измените размер по ширине до тех пор, пока в зеленом поле вверху справа не отобразится «800», и измените размер по высоте, пока не будет включена полоса прокрутки справа, вы можете увидеть проблему. Если вы затем измените размер IE, полоса прокрутки останется, но если вы измените размер Firefox на более широкий, полоса прокрутки начнет исчезать. Я в недоумении относительно того, почему это происходит ....
Обратите внимание, что AFAIK, getWindowWidth () должен быть кросс-браузерно-совместимым, но я не очень уверен насчет findLPos () .... возможно, есть дополнительный объект в DOM Firefox или что-то еще, что меняет результат?