JavaScript实现页面元素自适应布局
本文介绍如何利用JavaScript实现页面元素的自适应布局。通过定时检测窗口尺寸变化,动态计算并更新特定Div块的宽高及绝对位置,从而在分辨率改变或窗口缩放时保持界面布局的合理性。该方法适用于需要精细控制布局的传统Web项目。
JavaScript实现页面元素自适应布局
在某些场景下,我们需要实现类似新版Yahoo邮箱的效果,使数据显示区域能够根据浏览器窗口的大小自动调整。虽然纯CSS控制有时难以完美达成这一目标,但借助JavaScript可以轻松实现常见的页面自适应效果。例如,在iSunXoft的HR开源项目中就应用了此类技术。
实现原理:
核心思路是获取IE显示屏幕的宽高,确定哪些对象采用绝对定位且位置固定,哪些不固定,以及哪些元素的长宽是固定的。随后,像设计Windows Form程序界面一样,根据软件界面的大小动态调整相关对象的长宽和绝对位置等属性。由于Web程序无法实时检测窗口大小的变化,因此需要通过SetTimeout函数进行隔时递归调用来实现自适应效果。
以下是摘自iSunXoft HR开源项目SysForm.aspx中实现自适应的方法代码。
注:$("")是有变化的元素。
var h;
var w;
function resize()
{
var he = document.body.offsetHeight;
var wi = document.body.offsetWidth;
if($("DataTable").style.display.toLowerCase()==""||$("DataTable").style.display.toLowerCase()=="inline")
{
if (h==he&&w==wi)
{
if($("leftMenu").style.display.toLowerCase() == "none" )
{
$("DivDataList").style.width = wi - 30;
}
else
{
$("DivDataList").style.width = wi - 223;
}
setTimeout("resize()",1000);
return;
}
h = he;
w = wi;
if (he>100)
{
$("DivDataList").style.height = he - 172;
}
if(wi>200)
{
$("DivDataList").style.width = wi - 223;
if($("leftMenu").style.display.toLowerCase() == "none" )
{
$("DivDataList").style.width = wi - 30;
}
}
}
if($("DataEmpWidows").style.display.toLowerCase()=="inline"||$("DataEmpWidows").style.display.toLowerCase()=="")
{
if (h==he&&w==wi)
{
if($("leftMenu").style.display.toLowerCase() == "none" )
{
$("DataEmpWidows").style.width = wi - 30;
}
else
{
$("DataEmpWidows").style.width = wi - 223;
}
}
h = he;
w = wi;
if (he>150)
{
$("DataEmpWidows").style.height = he - 132;
}
if(wi>200)
{
$("DataEmpWidows").style.width = wi - 223;
if($("leftMenu").style.display.toLowerCase() == "none" )
{
$("DataEmpWidows").style.width = wi - 30;
}
}
}
if(typeof($("EipWindows")) != "undefined")
{
//if($("EipWindows").style.display.toLowerCase()=="inline")
//{
// if (h==he&&w==wi)
// {
// if($("leftMenu").style.display.toLowerCase() == "none" )
// {
// $("EipWindows").style.width = wi - 30;
// }
// else
// {
// $("EipWindows").style.width = wi - 223;
// }
// }
// h = he;
// w = wi;
// if (he>150)
// {
// $("EipWindows").style.height = he - 132;
// }
// if(wi>200)
// {
// $("EipWindows").style.width = wi - 223;
// if($("leftMenu").style.display.toLowerCase() == "none" )
// {
// $("EipWindows").style.width = wi - 30;
// }
// }
//}
}
setTimeout("resize()",1000);
}
resize();
然后在网页上调用resize();一旦窗口大小有变化,或是分辩率有变化,都能确保能够实现真正意义上的自适应.
JavaScript闭包与类(Class)的区别及适用场景对比
2026-11-05 15:48:57
JavaScript入门要学ES6吗?let与箭头函数等新特性解析
2026-11-05 14:49:16
JavaScript 8种数据类型详解:基本类型与引用类型的区别
2026-11-05 14:25:15
怎么在JavaScript中使用async/await优化Ajax异步流程
2026-11-05 13:56:15
JavaScript replace回调函数实现动态正则替换逻辑
2026-11-05 13:52:13
