我如何创建随机和动态大小图像的马赛克风格图片库,而不使用任何插件
How can I create mosaic style image gallery of random and dynamic size images without using any plugins?
我试图创建一个简单的马赛克风格的图片库。我已经在网上搜索了,发现很多人建议使用可用的插件。但是我想知道有什么方法可以让我自己创建马赛克布局图库?我想从数据库中获取随机和动态大小的图像,并显示在马赛克风格。
阅读韦斯利的回答。据说真正的随机要么很难,要么不可能,因为它会产生空白,不会填满。
如果你想看到只有3个预定义框大小的缩小版本的实现,点击这里
一些代码:var FULL = {'height': 100, 'width': 200};
var HALF = {'height': 50, 'width': 100};
var QUARTER = {'height': 25, 'width': 50};
var sizes = ['quarter', 'half', 'full'];
var vacancy = [
[1 , 1 , 1 , 1 ],
[1 , 1 , 1 , 1],
[1 , 1 , 1 , 1],
[1 , 1 , 1 , 1]
];
for (var i = 0; i < boxes.length; i++) {
if ($('.grid.box.vacant').size() < 1) {
var gridBox = $('<div class="grid box vacant"/>');
$('.container').append(gridBox);
vacancy = [
[1 , 1 , 1 , 1 ],
[1 , 1 , 1 , 1],
[1 , 1 , 1 , 1],
[1 , 1 , 1 , 1]
];
}
var className;
var reduceChoice = 0;
do {
className = sizes[Math.floor(Math.random() * (sizes.length - reduceChoice))];
var myPoint = findFreeGrid(vacancy, className);
reduceChoice++;
} while (!myPoint);
markFill(vacancy, className, myPoint);
jQuery(boxes[i]).addClass(className).css({'top': myPoint[1] * QUARTER.height, 'left': myPoint[0] * QUARTER.width});
$('.grid.box.vacant').append(boxes[i]);
if (noFreeGrid(vacancy)) {
$('.grid.box.vacant').removeClass('vacant');
}
}
function noFreeGrid(vacancy) {
var nofree = true;
for (var i = 0; i < vacancy.length; i++)
for (var j = 0; j < vacancy[0].length; j++)
if (vacancy[i][j] == 1) nofree = false;
return nofree;
}
function findFreeGrid(vacancy, className) {
for (var r = 0; r < 4; r++)
for (var c = 0; c < 4; c++) {
myPoint = [r, c];
if (checkFit(vacancy, className, myPoint))return myPoint;
}
return false;
}
function checkFit(vacancy, size, position) {
if (size == 'full') {
for (var i = 0; i < vacancy.length; i++)
for (var j = 0; j < vacancy[0].length; j++)
if (vacancy[i][j] != 1) return false;
return true;
}
else if (size == 'half' && position[0] < 3 && position[1] < 3) {
if (vacancy[position[0]][position[1]] == 1
&& vacancy[position[0]][position[1]] == 1
&& vacancy[position[0] + 1][position[1]] == 1
&& vacancy[position[0]][position[1] + 1] == 1
&& vacancy[position[0] + 1][position[1] + 1] == 1
)return true;
}
else if (size == 'quarter') {
if (vacancy[position[0]][position[1]] == 1)return true;
}
return false;
}
function markFill(vacancy, size, position) {
if (size == 'full') {
for (var i = 0; i < vacancy.length; i++)
for (var j = 0; j < vacancy[0].length; j++)
vacancy[i][j] = 0;
}
else if (size == 'half') {
vacancy[position[0]][position[1]] = 0;
vacancy[position[0]][position[1]] = 0;
vacancy[position[0] + 1][position[1]] = 0;
vacancy[position[0]][position[1] + 1] = 0;
vacancy[position[0] + 1][position[1] + 1] = 0;
}
else if (size == 'quarter') {
vacancy[position[0]][position[1]] = 0;
}
}
相关文章:
- 漂亮照片图片库中的Facebook赞按钮
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 为什么Airbnb风格指南说不鼓励依赖函数名称推断
- CKEditor-我在editor.css中的风格是't
- onclick风格的整个李不想要
- JavaScript改变了双方的显示风格
- 如何移除或改进:在Bootstrap Carousel上聚焦风格
- 如何塑造李的风格;s正在使用单击的李的值
- 用于Dynamic Div'的Javascript数学函数;s风格
- 创建一个不断变化的谷歌涂鸦风格的标题
- 响应式图片库,每个图片都可以通过锚链接访问
- 网站图片库
- jQuery将TD注入适当的列(俄罗斯方块风格)
- 如何使用HTML、CSS和JavaScript创建自动图片库幻灯片
- 最好的技术自上而下RPG风格的网格滚动
- 在Windows Metro风格的Javascript应用程序中读取文件内容
- jquery可以't隐藏输入名称为“”的表单;风格”;
- ACF谷歌地图-改变风格
- 我如何创建随机和动态大小图像的马赛克风格图片库,而不使用任何插件
- 如何建立凌乱风格/无序风格缩略图的人图片库