放大网格坐标
Enlarge grid coordinates?
我有一个坐标列表,用来定义不同大小元素的网格。每个元素从左上角开始定位,给出起始列、起始行及其宽度和高度。
{
"col": 1,
"row": 1,
"size_x": 3,
"size_y": 2
},
{
"col": 4,
"row": 1,
"size_x": 3,
"size_y": 2
},
{
"col": 1,
"row": 3,
"size_x": 3,
"size_y": 2
},
{
"col": 4,
"row": 3,
"size_x": 3,
"size_y": 2
},
{
"col": 1,
"row": 5,
"size_x": 3,
"size_y": 2
},
{
"col": 4,
"row": 5,
"size_x": 3,
"size_y": 2
}
这组坐标是在6列网格上定义的。
现在网格有12列(每行是前面的一半),所以我需要将size_x
和size_y
乘以2。
但这还不够,我还需要更新col
和row
坐标,以防止冲突,并实现旧的6列网格的相同布局。
这是我准备的脚本,它将size_x
和size_y
放大了2,并以某种方式修复了col
。。。但我找不到一种方法来完成它并使它变得可靠。http://codepen.io/FezVrasta/pen/qbrYGv?editors=001
一旦应用到UI,布局应该是这样的:
[---][---]
[---][---]
[---][---]
- = 1 col
[ = 2 rows
我不是100%清楚这个问题,但我认为你希望六列网格发展成12列网格,并使用一些基本的数学方法,这很容易。在谈到定位时,我已经将一些变量重命名为我觉得可以轻松处理的变量,但以下记录了12列宽的网格,它将与您传递的任何网格一起工作,这些网格是结构化的对象数组(希望只包含数字)。
更新我纠正了脚本中的一些愚蠢错误,并更改了输出和输入,以便您可以直接在代码段中看到它们。希望它能有所帮助!
var grid = [
{ x: 1, y: 1, w: 3, h: 2 },
{ x: 4, y: 1, w: 3, h: 2 },
{ x: 1, y: 3, w: 3, h: 2 },
{ x: 4, y: 3, w: 3, h: 2 },
{ x: 1, y: 5, w: 3, h: 2 },
{ x: 4, y: 5, w: 3, h: 2 }
];
document.getElementById('input').textContent = JSON.stringify(grid);
function resizeGrid(grid, from, to){
// Loop through the grid
for(var i = 0; i < grid.length; i++)
// Loop through the values of the grid
for(var key in grid[i])
// This is a safety check to not enumerate inherited properties
// not necessary, but I find it safer when doing for..in loops
if(grid[i].hasOwnProperty(key))
// Simply divide the value by the original and
// multiply by the desired output
grid[i][key] = grid[i][key] / from * to
return grid;
}
document.getElementById('output').textContent = JSON.stringify(resizeGrid(grid, 6, 12));
<div id="input"></div>
<div id="output"></div>
我也不能100%确定你是如何设置网格的,但最好将你最左上角的坐标保持为0
——原因是如果你在0, 0
有东西,当你调整网格大小时,它会留在那个角落——如果你的坐标从1
开始,这会变得更复杂,因为1,1
现在会变成2,2
,尽管它不应该改变。始终从0
开始计数!
为了解决这个1,1
问题,你可以简单地替换这行:
grid[i][key] = grid[i][key] / from * to;
这行:
grid[i][key] = grid[i][key] === 1
? 1
: grid[i][key] / from * to;
这里有一个实现:
var grid = [
{ x: 1, y: 1, w: 3, h: 2 },
{ x: 4, y: 1, w: 3, h: 2 }
];
document.getElementById('input').textContent = JSON.stringify(grid);
function resizeGrid(grid, from, to){
// Loop through the grid
for(var i = 0; i < grid.length; i++)
for(var key in grid[i])
if(grid[i].hasOwnProperty(key))
switch(key){
case 'w': case 'h': grid[i][key] = grid[i][key] / from * to; break;
case 'x': case 'y': grid[i][key] = (grid[i][key] - 1) / from * to + 1; break;
}
return grid;
}
document.getElementById('output').textContent = JSON.stringify(resizeGrid(grid, 6, 12));
<div id="input"></div>
<div id="output"></div>
相关文章:
- 剑道网格jQuery动画()问题
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 我可以更改剑道UI网格吗's的外键值
- 如何在d3.js中返回路径的y坐标
- 基于网格的游戏中的负坐标
- Javascript/Canvas-查找相对于坐标网格位置的鼠标坐标
- 从网格视图行中获取坐标,以使用 Raphael.js 在画布上绘制
- 如何将像素坐标转换为等轴测网格坐标
- 如何从网格表面获取高程值(Z坐标),给出X和Y的三.js
- JS:显示一个无限长的坐标系统(网格)
- 放大网格坐标
- 如何使用HTML、CSS、Javascript和If Useful JQuery创建可点击分区的坐标网格
- 用javascript计算网格的坐标
- 画布和获取坐标基于网格(通过鼠标x鼠标y)
- 如何在网格中光线投射和获得三角形的质心坐标
- 如何从二维数组(JS)中获取网格的坐标
- 在extjs中用行/列坐标填充网格
- 如何合并网格,但保持坐标在three.js
- 检查x y网格坐标的阵列是否存在重复并删除