今天又有一篇关于 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" );
}
可以在 这里找到这段新代码的实时演示。具有讽刺意味的是,他们使用了我写的一段 代码,但没有给我署名。
这段代码中我最喜欢的部分绝对是短路操作。这段代码的原始部分来自 这篇文章。我不知道为什么,但每当我看到包含多个赋值的 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
这样你就会对这段(之前)非常冗长的代码中实际上发生的事情有一个更好的了解。