var stop=setTimeout(function(){fold_off(o);},10);

解决方案 »

  1.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script type="text/javascript">
    <!--
    var O;
    window.onload=function(){
       var obj=document.getElementById("test");
       fold_off(obj);
    }function fold_off(o){
       if(!O)O=o;
       var h=parseInt(O.style.height);
       h--;
       O.style.height=h+"px";
       var stop=setTimeout("fold_off();",10);
       if (h == 0){
           clearTimeout(stop);
       }
    }
    //-->
    </script>
    </head>
    <body>
       <div id="test" style="height:150px;width:100px;background-color:#DAE3FE;"></div>
    </body>
    </html>
      

  2.   

    1楼正解
    另一种方法可以这样<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script type="text/javascript">
    <!--
    window.onload=function(){
       var obj=document.getElementById("test");
       fold_off(obj);
    }function fold_off(o){
       var h=o.offsetHeight;
       h--;
       o.style.height=h+"px";
       var stop=setTimeout(fold_off.bind(fold_off,o),25);
       if (h == 0){
           clearTimeout(stop);
       }
    }Function.prototype.bind = function(){ //这里定义一个方法
    var oThis = this, ars = Array.prototype.slice.call(arguments), obj = ars.shift();
    return function(){
    oThis.apply(obj, ars);
    }
    }
    //-->
    </script>
    </head>
    <body>
       <div id="test" style="height:150px;width:100px;background-color:#DAE3FE;"></div>
    </body>
    </html>