<body><div id="ss" style="height:200px; width:200px; background-color:#FF0000; position:absolute;z-index:2;"></div>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></body>
<script>
var div  = document.getElementById("ss")
var top  = (document.body.clientHeight-div.offsetHeight)/2
var left = (document.body.clientWidth-div.offsetWidth)/2
var obj = document.getElementById("ss");
function change()
{  
   //div.style.left=(document.body.clientWidth-div.offsetWidth)/2
   //div.style.top =(document.body.clientHeight-div.offsetHeight)/2+document.body.scrollTop
   top = (document.body.clientHeight-div.offsetHeight)/2
   left = (document.body.clientWidth-div.offsetWidth)/2
   div.style.left = left + "px";
   div.style.top = top + "px";
   obj.innerHTML = top + "<br/>";
   obj.innerHTML += left;
}
change()
window.onresize=change
window.onscroll=function(){div.style.top=top+document.body.scrollTop}
</script>

解决方案 »

  1.   

    var div  = document.getElementById("ss")
    var top  = (document.body.clientHeight-div.offsetHeight)/2
    var left = (document.body.clientWidth-div.offsetWidth)/2
    你这部分,放外面了
    应该是放在change函数里
      

  2.   

    那个是初始化时候
    用2变量去记录位置  change里面有计算位置的东西 
      

  3.   

    IE当中长宽高好像必须定死,但是ff不是所以你这个写法肯定测试不能够通过,应该可以换种写法。
      

  4.   


    <div id="box" style="width:100%"><div>test</div></div>
    <body><div id="ss" style="height:200px; width:200px; background-color:#FF0000; position:absolute"></div>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></body>
    <script>
    var isIE = (document.all) ? true : false
    var div  = document.getElementById("ss")
    var top  = (document.body.clientHeight-div.offsetHeight)/2
    var left = (document.body.clientWidth-div.offsetWidth)/2
    function change()
    {  
       div.style.left=(document.body.clientWidth-div.offsetWidth)/2
       div.style.top =(document.body.clientHeight-div.offsetHeight)/2+document.body.scrollTop
       top = (document.body.clientHeight-div.offsetHeight)/2
       left = (document.body.clientWidth-div.offsetWidth)/2
    }
    change()
    var oContainer = document.getElementById("box");
    if(isIE){
    oContainer.onresize=change
    }else{
    window.onresize=change
    }window.onscroll=function(){div.style.top=top+document.body.scrollTop}
    </script>
      

  5.   

    to 4楼
    在发帖之前已拜读过你的大作  有同样问题 本想截图为证,但是图片老放不上去。。to 5楼
    仔细看操作步骤to 梁超兄
    问题解决了
    但是没能理解这中写法为什么 box  要在body的外面为什么下面又要这么写   请指教下吧。
    var oContainer = document.getElementById("box");
    oContainer.onresize=change
      

  6.   

    主要你可以上网看下IE下window.onresize的BUG或者你可以在你的change()函数里加个alert测试下
    看看每次页面resize在IE下是不是都计算了两次 
    所以我给你加了个div将resize事件转移到div上了
      

  7.   

    不过bug跟是否居中关系不大
    <body><div id="ss" style="height:200px; width:200px; background-color:#FF0000; position:absolute"></div>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></body>
    <script>
    var div  = document.getElementById("ss")
    var top  = (document.body.clientHeight-div.offsetHeight)/2
    var left = (document.body.clientWidth-div.offsetWidth)/2
    function change()
    {  
       div.style.left=(document.body.clientWidth-div.offsetWidth)/2
       div.style.top =(document.body.clientHeight-div.offsetHeight)/2+document.body.scrollTop
       top = (document.body.clientHeight-div.offsetHeight)/2
       left = (document.body.clientWidth-div.offsetWidth)/2
    }
    change()
    var t
    window.onresize=function(){clearTimeout(t);t=setTimeout(change,0)}
    window.onscroll=function(){div.style.top=top+document.body.scrollTop}
    </script>这样好像也行
      

  8.   

    感觉是要“等一下”resize完之后再定位才能正确定位
      

  9.   

    s_liangchao1s 的方法我想其实就是把change放在window resize完之后执行