有时候,我们可能需要象新版的Yahoo邮箱一样,让一些数据显示块可以根据页面大小进行自适应。事实并不难,但是如果单纯用CSS控制的话,往往不能完全实现我们要的效果,这时候需要借助Javascript,Javascript可以让我我们实现司空见怪的自适应页面,在iSunXoft的HR开源项目(http://www.cnblogs.com/isunstudio/archive/2007/01/17/623072.aspx)就应用到.
实现原理:
获取IE显示屏幕的宽高.确定哪些对象是绝对位置是固定的,那些是不固定的,哪些长宽是固定,然后象WIN FORM程序一样,根所软件界面的大小,进行设计相关对象的长宽,绝对位置等属性,但是在WEB上程序没有办法实时检测到窗口大小变化,只能用让实现自适应的方法通过SetTimeout 函数进行隔时递归调用. 可以用window.onresize();
下面是摘自iSunXoft Hr开源项目SysForm.aspx实现的方法.
注:$("")是有变化的元素.
 var h;
var h;
 var w;
   var w;
 function resize()
   function resize()
 {
   {   
 
    
 var he = document.body.offsetHeight;
    var he = document.body.offsetHeight;
 var wi = document.body.offsetWidth;
    var wi = document.body.offsetWidth;
 if($("DataTable").style.display.toLowerCase()==""||$("DataTable").style.display.toLowerCase()=="inline")
    if($("DataTable").style.display.toLowerCase()==""||$("DataTable").style.display.toLowerCase()=="inline")
 {
    {
 if (h==he&&w==wi)
     if (h==he&&w==wi)
 {
     {
 if($("leftMenu").style.display.toLowerCase() == "none" )
      if($("leftMenu").style.display.toLowerCase() == "none" )
 {
      {
 $("DivDataList").style.width = wi - 30;
       $("DivDataList").style.width = wi - 30;
 }
      }
 else
      else
 {
      {
 $("DivDataList").style.width = wi - 223;
       $("DivDataList").style.width = wi - 223;
 }
      }        
 // setTimeout("resize()",1000);
     // setTimeout("resize()",1000);
 return;
      return;
 }
     }
 h = he;
     h = he;
 w = wi;
     w = wi;
 
     
 if (he>100)
     if (he>100)
 {
     {
 $("DivDataList").style.height = he - 172;
      $("DivDataList").style.height = he - 172;
 
      
 }
     }
 if(wi>200)
     if(wi>200)
 {
     {
 $("DivDataList").style.width = wi - 223;
      $("DivDataList").style.width = wi - 223;
 if($("leftMenu").style.display.toLowerCase() == "none" )
      if($("leftMenu").style.display.toLowerCase() == "none" )
 {
      {
 $("DivDataList").style.width = wi - 30;
       $("DivDataList").style.width = wi - 30;
 }
      }
 }
     }
 }
    }

 if($("DataEmpWidows").style.display.toLowerCase()=="inline"||$("DataEmpWidows").style.display.toLowerCase()=="")
    if($("DataEmpWidows").style.display.toLowerCase()=="inline"||$("DataEmpWidows").style.display.toLowerCase()=="")
 {
    {
 if (h==he&&w==wi)
     if (h==he&&w==wi)
 {
     {
 if($("leftMenu").style.display.toLowerCase() == "none" )
      if($("leftMenu").style.display.toLowerCase() == "none" )
 {
      {
 $("DataEmpWidows").style.width = wi - 30;
       $("DataEmpWidows").style.width = wi - 30;
 }
      }
 else
      else
 {
      {
 $("DataEmpWidows").style.width = wi - 223;
       $("DataEmpWidows").style.width = wi - 223;
 }
      }        
 }
     }
 h = he;
     h = he;
 w = wi;
     w = wi;
 if (he>150)
     if (he>150)
 {
     {
 $("DataEmpWidows").style.height = he - 132;
      $("DataEmpWidows").style.height = he - 132;
 }
     }
 if(wi>200)
     if(wi>200)
 {
     {
 $("DataEmpWidows").style.width = wi - 223;
      $("DataEmpWidows").style.width = wi - 223;
 if($("leftMenu").style.display.toLowerCase() == "none" )
      if($("leftMenu").style.display.toLowerCase() == "none" )
 {
      {
 $("DataEmpWidows").style.width = wi - 30;
       $("DataEmpWidows").style.width = wi - 30;
 }
      }
 }
     }
 
    
 }
    }
 if(typeof($("EipWindows")) != "undefined")
    if(typeof($("EipWindows")) != "undefined")
 {
    {
 //if($("EipWindows").style.display.toLowerCase()=="inline")
     //if($("EipWindows").style.display.toLowerCase()=="inline")
 //{
     //{
 // if (h==he&&w==wi)
     // if (h==he&&w==wi)
 // {
     // {
 //  if($("leftMenu").style.display.toLowerCase() == "none" )
     //  if($("leftMenu").style.display.toLowerCase() == "none" )
 //  {
     //  {
 //   $("EipWindows").style.width = wi - 30;
     //   $("EipWindows").style.width = wi - 30;
 //  }
     //  }
 //  else
     //  else
 //  {
     //  {
 //   $("EipWindows").style.width = wi - 223;
     //   $("EipWindows").style.width = wi - 223;
 //  }
     //  }        
 // }
     // }
 // h = he;
     // h = he;
 // w = wi;
     // w = wi;
 // if (he>150)
     // if (he>150)
 // {
     // {
 //  $("EipWindows").style.height = he - 132;
     //  $("EipWindows").style.height = he - 132;
 // }
     // }
 // if(wi>200)
     // if(wi>200)
 // {
     // {
 //  $("EipWindows").style.width = wi - 223;
     //  $("EipWindows").style.width = wi - 223;
 //  if($("leftMenu").style.display.toLowerCase() == "none" )
     //  if($("leftMenu").style.display.toLowerCase() == "none" )
 //  {
     //  {
 //   $("EipWindows").style.width = wi - 30;
     //   $("EipWindows").style.width = wi - 30;
 //  }
     //  }
 // }
     // }    
 //}
     //}
 }
    }
 // setTimeout("resize()",1000);
   // setTimeout("resize()",1000);
 }
   }
 resize();
   resize();
 window.onresize=resize;
   window.onresize=resize;

 
然后就在网页上调用resize();一旦窗口大小有变化,或是分辩率有变化,都能确保能够实现真正意义上的自适应.
// 谢谢CAT
http://www.cnblogs.com/isunstudio/archive/2007/01/18/623373.html
实现原理:
获取IE显示屏幕的宽高.确定哪些对象是绝对位置是固定的,那些是不固定的,哪些长宽是固定,然后象WIN FORM程序一样,根所软件界面的大小,进行设计相关对象的长宽,绝对位置等属性,
下面是摘自iSunXoft Hr开源项目SysForm.aspx实现的方法.
注:$("")是有变化的元素.
 var h;
var h; var w;
   var w; function resize()
   function resize() {
   {    
     var he = document.body.offsetHeight;
    var he = document.body.offsetHeight; var wi = document.body.offsetWidth;
    var wi = document.body.offsetWidth; if($("DataTable").style.display.toLowerCase()==""||$("DataTable").style.display.toLowerCase()=="inline")
    if($("DataTable").style.display.toLowerCase()==""||$("DataTable").style.display.toLowerCase()=="inline") {
    { if (h==he&&w==wi)
     if (h==he&&w==wi) {
     { if($("leftMenu").style.display.toLowerCase() == "none" )
      if($("leftMenu").style.display.toLowerCase() == "none" ) {
      { $("DivDataList").style.width = wi - 30;
       $("DivDataList").style.width = wi - 30; }
      } else
      else {
      { $("DivDataList").style.width = wi - 223;
       $("DivDataList").style.width = wi - 223; }
      }         // setTimeout("resize()",1000);
     // setTimeout("resize()",1000); return;
      return; }
     } h = he;
     h = he; w = wi;
     w = wi; 
      if (he>100)
     if (he>100) {
     { $("DivDataList").style.height = he - 172;
      $("DivDataList").style.height = he - 172; 
       }
     } if(wi>200)
     if(wi>200) {
     { $("DivDataList").style.width = wi - 223;
      $("DivDataList").style.width = wi - 223; if($("leftMenu").style.display.toLowerCase() == "none" )
      if($("leftMenu").style.display.toLowerCase() == "none" ) {
      { $("DivDataList").style.width = wi - 30;
       $("DivDataList").style.width = wi - 30; }
      } }
     } }
    }
 if($("DataEmpWidows").style.display.toLowerCase()=="inline"||$("DataEmpWidows").style.display.toLowerCase()=="")
    if($("DataEmpWidows").style.display.toLowerCase()=="inline"||$("DataEmpWidows").style.display.toLowerCase()=="") {
    { if (h==he&&w==wi)
     if (h==he&&w==wi) {
     { if($("leftMenu").style.display.toLowerCase() == "none" )
      if($("leftMenu").style.display.toLowerCase() == "none" ) {
      { $("DataEmpWidows").style.width = wi - 30;
       $("DataEmpWidows").style.width = wi - 30; }
      } else
      else {
      { $("DataEmpWidows").style.width = wi - 223;
       $("DataEmpWidows").style.width = wi - 223; }
      }         }
     } h = he;
     h = he; w = wi;
     w = wi; if (he>150)
     if (he>150) {
     { $("DataEmpWidows").style.height = he - 132;
      $("DataEmpWidows").style.height = he - 132; }
     } if(wi>200)
     if(wi>200) {
     { $("DataEmpWidows").style.width = wi - 223;
      $("DataEmpWidows").style.width = wi - 223; if($("leftMenu").style.display.toLowerCase() == "none" )
      if($("leftMenu").style.display.toLowerCase() == "none" ) {
      { $("DataEmpWidows").style.width = wi - 30;
       $("DataEmpWidows").style.width = wi - 30; }
      } }
     } 
     }
    } if(typeof($("EipWindows")) != "undefined")
    if(typeof($("EipWindows")) != "undefined") {
    { //if($("EipWindows").style.display.toLowerCase()=="inline")
     //if($("EipWindows").style.display.toLowerCase()=="inline") //{
     //{ // if (h==he&&w==wi)
     // if (h==he&&w==wi) // {
     // { //  if($("leftMenu").style.display.toLowerCase() == "none" )
     //  if($("leftMenu").style.display.toLowerCase() == "none" ) //  {
     //  { //   $("EipWindows").style.width = wi - 30;
     //   $("EipWindows").style.width = wi - 30; //  }
     //  } //  else
     //  else //  {
     //  { //   $("EipWindows").style.width = wi - 223;
     //   $("EipWindows").style.width = wi - 223; //  }
     //  }         // }
     // } // h = he;
     // h = he; // w = wi;
     // w = wi; // if (he>150)
     // if (he>150) // {
     // { //  $("EipWindows").style.height = he - 132;
     //  $("EipWindows").style.height = he - 132; // }
     // } // if(wi>200)
     // if(wi>200) // {
     // { //  $("EipWindows").style.width = wi - 223;
     //  $("EipWindows").style.width = wi - 223; //  if($("leftMenu").style.display.toLowerCase() == "none" )
     //  if($("leftMenu").style.display.toLowerCase() == "none" ) //  {
     //  { //   $("EipWindows").style.width = wi - 30;
     //   $("EipWindows").style.width = wi - 30; //  }
     //  } // }
     // }     //}
     //} }
    } // setTimeout("resize()",1000);
   // setTimeout("resize()",1000); }
   } resize();
   resize(); window.onresize=resize;
   window.onresize=resize;

然后就在网页上调用resize();一旦窗口大小有变化,或是分辩率有变化,都能确保能够实现真正意义上的自适应.
// 谢谢CAT
http://www.cnblogs.com/isunstudio/archive/2007/01/18/623373.html
 
                    
                     
                    
                 
                    
                 
 
         
   
 
     
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号