格子布局 js
<!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的更多相关文章
- bootstrap深入理解之格子布局
一.源码文件: _grid.scss:格子系统类文件 Mixins/_grid.scss:支持格子系统实现的mixin集合 Mixins/_grid-framework.scss:格子系统实现的核心m ...
- android自定义viewgroup实现等分格子布局
先上效果图: 实现这样的效果: 一般的思路就是,直接写布局文件,用LinearLayout 嵌套多层子LinearLayout,然后根据权重layout_weight可以达到上面的效果 还有就是利用g ...
- 【转】H5+css布局+js+前端和移动端ui+其他汇总
无意间发现一个博客比较好,由于内容比较多,就把链接转过来,先保存着方便看的时候看. 感谢博主“张果” +++++++++++++++++++++++++++++++++++++++++++++++++ ...
- 四种布局JS
现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...
- 移动端rem布局 js
// rem布局适配 (function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in ...
- 设计一个自动生成棋盘格子的JS小程序
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 等宽格子堆砌 js
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- rem布局js设置,设置网页文档参考字体闭包函数
(function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ...
- rem布局js实现
(function(designWidth, maxWidth) { var doc = document, win = window; var docEl = doc.documentElement ...
随机推荐
- Memcached使用
一.Memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网 ...
- JDBC数据库连接池原理
JDBC是java数据库连接的简称.它是一种用于实行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成.其相关的API都在java.sql.*包下 ...
- 跨平台base64数据传输注意问题
今天用base64编码传输json串,android端那边始终看不到图片! 首先发现android端接收的json串长度不一致,仔细研究发现android端接收到的json数据里把服务器数据里的&qu ...
- SQL Server 锁表说明
锁定数据库的一个表 SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 SELECT * FROM table WITH (HOLDLOCK) 其 ...
- Redis Master/Slave 实践
本次我们将模拟 Master(1) + Slave(4) 的场景,并通过ASP.NET WEB API进行数据的提交及查询,监控 Redis Master/Slave 数据分发情况,只大致概述,不会按 ...
- AngularJs学习笔记--expression
原版地址:http://code.angularjs.org/1.0.2/docs/guide/expression 表达式(Expressions)是类Javascript的代码片段,通常放置在绑定 ...
- Yahoo, Steve blog
Performance Research Domain Sharding revisited A Software Developer's Guide to HTTP How the Browser ...
- Android fill_parent、wrap_content和match_parent的区别
三个属性都用来适应视图的水平或垂直大小,一个以视图的内容或尺寸为基础的布局比精确地指定视图范围更加方便. 1)fill_parent 设置一个构件的布局为fill_parent将强制性地使构件扩展,以 ...
- PHP 性能分析第一篇: Xhprof & Xhgui 介绍
[前言]这是国外知名博主 Davey Shafik所撰写的 PHP 应用性能分析系列的第一篇,阅读第二篇可深入了解 xhgui,第三篇则关注于性能调优实践. 什么是性能分析? 性能分析是衡量应用程序在 ...
- 在iptables防火墙下开启vsftpd的端口
在开启vsftpd端口后发现用客户端工具能登陆,但无法浏览文件和新建文件.此时看了一下ftp的协议,发现ftp有主动模式和被动模式.在服务端开21端口是让客户端进来,并没有出去的端口,还在服务端开启出 ...