今天又有一篇 CSS/Javascript 文章在流传,叫做:基于宽度的布局。其前提是页面会根据浏览器宽度自动调整宽度。文章中还包含 38 行 Javascript 代码(我是在夸大其词),以完成这项任务。我将为你节省对他们代码的分析,直接展示以下改进后的代码。
$(window).resize(setWidth);
$(document).ready(setWidth);
function setWidth() {
var de = document.documentElement;
var w = (window.innerWidth || (de && de.clientWidth)
|| document.body.clientWidth) < 990 ?"alt":"main";
$("#wrapper").addClass( w + "wrapper" );
}
这个新代码的现场演示可以在 这里 找到。具有讽刺意味的是,他们使用的是我编写的 代码,但没有署名。
上面代码我最喜欢的部分绝对是短路操作。该部分的原始代码来自 这篇 evolt 文章。我不知道是什么原因,但是每当我看到一个包含多个赋值的 IF 语句时,就会感到毛骨悚然。所以,下面的代码
if (window.innerWidth)
{
theWidth = window.innerWidth
}
else if (document.documentElement
&& document.documentElement.clientWidth)
{
theWidth = document.documentElement.clientWidth
}
else if (document.body)
{
theWidth = document.body.clientWidth
}
被更改为
var de = document.documentElement;
var w = window.innerWidth || (de && de.clientWidth)
|| document.body.clientWidth;
如果你好奇为什么这能行得通,尝试运行以下语句
alert(1||0); // You get 1
alert(0||2); // You get 2
alert(0||(2&&1)); // You get 1
alert(0||(3&&4)||2); // You get 4
你将更好地理解那段(以前)非常冗长的代码中实际发生的事情。