<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>CSSASS</title>
</head>
<body></body>
<script>
var metro = {
sizeArray : [[1, 1], [1, 2], [2, 1], [2, 3], [1, 1], [1, 2], [1, 1], [2, 2], [1, 1]],
gen: {
w: 200,
h: 180
},
nameSpace: {
/* 1_0: [1,0] */
}
};
metro.init = function () {
metro.row = 1000 / metro.gen.w >> 0;
metro.sort(metro.sizeArray);
};
metro.sort = function (size) {
var x = 0,
y = 0,
memory = {
flag: Infinity,
x: Infinity,
y: Infinity
},
name;
for (var n = 0; n < size.length; n++) {
if (memory.flag == 0) {
x = memory.x;
y = memory.y;
}
memory.flag--;
if (x > metro.row - 1) {
x = 0;
y ++;
}
name = x + '_' + y;
if (name in this.nameSpace) {
n --;
x ++;
memory.flag < Infinity && memory.flag++;
continue;
}
if (size[n][0] * size[n][1] == 1) {
metro.nameSpace[name] = [x, y];
LOG(x, y, n, name, metro.nameSpace[name]);
x++;
} else {
if (beOver(x, y, size[n])) {
if (memory.y > y) {
memory.y = y;
memory.x = x;
}
if (memory.y < Infinity) memory.flag = 1;
n --;
x ++;
continue;
}
metro.nameSpace[name] = [x, y];
LOG(x, y, n, name, metro.nameSpace[name]);
hold(x, y, n);
x += size[n][0];
}
if (memory.flag == -1) memory = {
flag: Infinity,
x: Infinity,
y: Infinity
};
};
function beOver(x, y, item) {
var name;
if (x + item[0] > metro.row) return true;
for (var k = 1; k < item[1]; k++) {
name = x + '_' + (y - 0 + k);
if (name in metro.nameSpace) return true;
}
for (k = 1; k < item[0]; k++) {
name = (x - 0 + k) + '_' + y;
if (name in metro.nameSpace) return true;
}
return false;
};
function hold(x, y, n) {
var item = metro.sizeArray[n];
for (var t = 0; t < item[0]; t++) {
for (var k = 0; k < item[1]; k++) {
name = (x + t) + '_' + (y + k);
if (t == 0 && k == 0) continue;
metro.nameSpace[name] = 0;
LOG_2(n ,name);
}
}
};
};
metro.init();
function LOG(x, y, n, key) { var left = metro.gen.w * x,
top = metro.gen.h * y,
width = metro.sizeArray[n][0] * metro.gen.w,
height = metro.sizeArray[n][1] * metro.gen.h;
var box = document.createElement("div");
box.id = "ID" + n;
box.innerHTML = "<h3>" + n +"</h3>" + key + ":(" + metro.nameSpace[key] + ")<br/>";
box.style.cssText = "position:absolute;border:1px solid #333;left:" + left + "px;top:" + top + "px;width:" + width + "px;height:" + height + "px;";
document.body.appendChild(box);
}
function LOG_2(n, key){ document.getElementById("ID" + n).innerHTML += key + ":(" + metro.nameSpace[key] + ")<br/>";
}
</script>
</html>

格子布局 js的更多相关文章

  1. bootstrap深入理解之格子布局

    一.源码文件: _grid.scss:格子系统类文件 Mixins/_grid.scss:支持格子系统实现的mixin集合 Mixins/_grid-framework.scss:格子系统实现的核心m ...

  2. android自定义viewgroup实现等分格子布局

    先上效果图: 实现这样的效果: 一般的思路就是,直接写布局文件,用LinearLayout 嵌套多层子LinearLayout,然后根据权重layout_weight可以达到上面的效果 还有就是利用g ...

  3. 【转】H5+css布局+js+前端和移动端ui+其他汇总

    无意间发现一个博客比较好,由于内容比较多,就把链接转过来,先保存着方便看的时候看. 感谢博主“张果” +++++++++++++++++++++++++++++++++++++++++++++++++ ...

  4. 四种布局JS

    现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...

  5. 移动端rem布局 js

    // rem布局适配 (function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in ...

  6. 设计一个自动生成棋盘格子的JS小程序

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 等宽格子堆砌 js

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. rem布局js设置,设置网页文档参考字体闭包函数

    (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ...

  9. rem布局js实现

    (function(designWidth, maxWidth) { var doc = document, win = window; var docEl = doc.documentElement ...

随机推荐

  1. Netsharp快速入门(之17) Netsharp基础功能(参照高级设置)

    5.2     参照高级设置 1. 以往来字段为例,打开平台工具-界面管理-列表管理,找到往来单位的资源节点,记下列表项目中的名称 2.记下往来单位部件工作区的id 3. 打开平台工具-界面管理-参照 ...

  2. X86架构CPU的逻辑原理

    本篇只是初略介绍X86的逻辑运行原理,并不涉及物理层面和汇编层面的知识. 一.冯洛伊曼体系的运作过程: 1.CPU的历史就不扯了,有兴趣的朋友可以网上搜一下. 2.X86CPU是基于冯洛伊曼架构体系, ...

  3. 【BZOJ】【3790】神奇项链

    Manacher算法/DP 找出所有的回文串,看做是一个个线段,那么问题就转化成了用最少的线段将整个区间覆盖起来,可以重叠,那么这就是一个DP了= = Orz ZKY大爷,让蒟蒻开眼界了……头一次知道 ...

  4. Matlab中diag函数注意事项

    在给李X写SVD代码的时候注意到的. >> a = magic(3) a = 8 1 6 3 5 7 4 9 2 >> diag(a) ans = 8 5 2 >> ...

  5. Leetcode#128 Longest Consecutive Sequence

    原题地址 1. 把所有元素都塞到集合里2. 遍历所有元素,对于每个元素,如果集合里没有,就算了,如果有的话,就向左向右拓展,找到最长的连续范围,同时在每次找的时候都把找到的删掉.这样做保证了同样的连续 ...

  6. 关于High-Resolution Timer(了解)

    如果一个系统包含高精度性能计数器(HRPC,high-resolution performance counter)则此系统提供高精度定时器.你可以使用API函数QueryPerformanceFre ...

  7. PE文件结构学习

    PE:Portable Executable File Format(可移植的执行体).Windows平台主流可执行文件格式..exe与.dll文件都是PE格式.32位的叫做PE32,64位的叫做PE ...

  8. 树链剖分 - BZOJ 1036: [ZJOI2008]树的统计Count

    这是树链剖分的入门题,也是我学树链剖分的第一题. 树链剖分:就是把树中和线段树联系起来,求(u,v)路径中权值的最大值和其路径的权值和. 入门blog:http://blog.sina.com.cn/ ...

  9. CodeForces 321A

    A. Ciel and Robot time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  10. java基础类:Object类和Math类

    1.2.3.4.5.6.7.7.