編輯解決方案已被發現!檢測間隔網格
這是關於它的blog post,這裏是Github repo!
我正在創建由多個大小的框組成的網格,這些大小設置爲高度和寬度 - 但會動態生成,因此每次頁面加載時都會有不同的網格。
我的問題 - 我試過使用砌體,但它捲起留下的空白,也試過同位素。我目前正在浮動導致佈局中斷的左側元素。
它是如何建成 - 我計算的屏幕尺寸,並確定從1到6的頁面最好的列數,然後根據該列寬我算一個「塊」這個塊本質上是完美的網格。然後我遍歷我的元素,並給他們1x1,1x2,2x2尺寸。
僅供參考這裏是另一個隨機生成的網格
我的問題 - 是否有檢測缺少空間的好辦法 - 目前我在把我的紅色和黑色的盒子另一個我的「塊」網格,這是綠色的,讓我看看我缺少空間。我已經閱讀過關於揹包裝箱問題以及裝箱問題 - 而且我很難理解其中的任何一種。
我試過了 - 我試圖計算,因爲我放置塊來確定最佳尺寸,但這仍然會導致奇怪的行爲。我也嘗試使用砌體和同位素。
我很好,有一個衣衫襤褸的底部邊緣,但實際的網格不能包含任何間隙。
注意 - 網格由潛在的無限數量的元素組成 - 我一直在考慮是否要從底部區域獲取元素並將其複製到缺失的區域中,以避免「轉移「元素 - 我只需要知道如何找到缺失的空間。
任何幫助或指向正確的方向將是偉大的!
這裏是一個jsfiddle
這裏是JS的基本代碼...
(function() {
GRID = function(el, sel) {
var self = this,
ran, ranSize, h, w;
self.options = {
el: $(el),
sel: $(sel),
cols: 1,
block: {
height: 0,
width: 0
},
matrix: {
w: [],
h: [],
t: [],
l: []
},
row: {
height: 0,
width: 0
},
col: {
height: 0,
width: 0
}
};
/*
* Size array
*/
self.sizes = [];
self.sizes[0] = [2, 2];
self.sizes[1] = [1, 2];
self.sizes[2] = [1, 1];
self.setup = function() {
/*
* Setup all options
*/
// block size
self.options.block.height = (window.innerWidth/self.cols())/1.5;
self.options.block.width = (window.innerWidth/self.cols());
// row
self.options.row.width = window.innerWidth;
for (var i = 0; i < 60; i++) {
$(".grid").append('<div class="box"></div>');
}
self.size_boxes();
}
self.size_boxes = function() {
if (self.cols() == 1) {
self.options.sel.height(self.options.block.height);
self.options.sel.width(self.options.block.width);
}
else {
self.options.sel.each(function() {
$this = $(this);
ran = Math.floor(Math.random() * self.sizes.length);
ranSize = self.sizes[ran];
if ($this.hasClass('promoted')) {
ran = 0;
}
if ($this.hasClass('post')) {
ran = 2;
}
h = self.options.block.height * self.sizes[ran][6];
w = self.options.block.width * self.sizes[ran][0];
// box sizes
$this.height(h);
$this.width(w);
});
}
$(".grid .box").height(self.options.block.height);
$(".grid .box").width(self.options.block.width);
}
self.cols = function() {
/*
* Determine cols
*/
var w = Math.floor(window.innerWidth);
var cols = 0;
if (w < 480) {
cols = 1;
}
else if (w > 480 && w < 780) {
cols = 2;
}
else if (w > 780 && w < 1080) {
cols = 3;
}
else if (w > 1080 && w < 1320) {
cols = 4;
}
else if (w > 1320 && w < 1680) {
cols = 5
}
else {
cols = 6;
}
return cols;
}
self.resize = function() {
$(".grid").height(window.innerHeight);
self.options.block.height = (window.innerWidth/self.cols())/1.5;
self.options.block.width = (window.innerWidth/self.cols());
self.options.row.width = window.innerWidth;
self.size_boxes();
}
self.setup();
return self;
};
})();
var _GRID = new GRID('.gallery', '.box');
嗨,老兄,我試圖採取裂縫在這一點,但我完全被你的問題感到困惑......「把紅色和黑色的盒子在塊的另一格」真把我也,我不能告訴如果你是統一分配尺寸(1x1,1x2,2x2),或者如果每個塊都有不同的尺寸,但也許這只是我的頭:) – inorganik
哈哈 - 所以我有兩個div絕對定位。 1個網格是完美的框或「塊」,這些塊的尺寸是根據列數和屏幕寬度計算的。這是綠色的網格(主要是爲了看看空白處在哪裏)。現在,另一個網格就是我的生活元素。這些被告知佔據1×1,1×2和2×2的「塊」的空間,因此1塊寬,2塊高。你在圖像中看到的圖像是黑色和紅色的大小的元素,綠色是顯示空間尺寸的基礎塊... –
你想要創建這樣的東西:http://stackexchange.com/sites – inorganik