javascript - 在容器中以相等的距离放置绝对位置元素
问题描述
我正在创建一个可排序的拖放片段,用户可以根据需要对网格项目进行排序和重新排序。我正在放置具有绝对位置的项目以使动画正确。
基本上,我有一个容器,一行中会有 n 个元素,我需要将这些项目放置在彼此相等的距离处。
我需要找到一种可靠的方法来计算每个元素的左值,以便正确放置它。
以下是我当前的代码:
let rowElemsCount= 4;
const arrangeItems = (items,rowElemsCount,container,elemWidth,elemHight) => {
elemHight= elemHight|| elemWidth;
let containerWidth = container.offsetWidth;
let containerHeight = Math.ceil(items.length / rowElemsCount) * elemHight;
container.style.height = containerHeight + "px";
items.forEach((item,i)=>{
let pos = {
x: (i%rowElemsCount) * elemWidth+ "px",
y: Math.floor(i/rowElemsCount) * elemHight+ "px"
};
item.style.cssText = "top:"+pos.y+";left:"+pos.x+";"
item.dataset.index = i;
});
}
我使用这种方法来组织元素,顶部的计算是完美的,但对于左侧,它只是将元素一个接一个地放置。我需要以某种方式复制 justify-content: space-between 。
解决方案
您忘记在计算中计算元素之间的空白。如果您将所有子容器的宽度相加,然后从父容器的宽度中减去它,您将得到剩余的空格,您需要将其分成分数。
parent width - children total width = leftover whitespace
如果空白仅被划分为子元素之间的部分,则应将剩余的空白除以子元素计数-1,因为第一个元素不需要填充
leftover whitespace / ( children - 1 ) = space between
现在你的左边就是剩下的白色加上左边的值
item index * ( element width + white space )
现在它们应该正确间隔。您与当前代码非常接近,实现这些更改应该很容易!
推荐阅读
- sql-server - 查找 SQL Server 2008 数据库连接以及如何终止它们
- python - 刮篮球运动员队名的最佳方法是什么?
- excel - Excel 旭日形图:缺少一些标签
- php - 脚本发布 value 中的第一个数字
- hive - 在 Hive 表的每个分区中选择第一行
- python - 如何使用 python 通过我的 hotmail.com 帐户自动发送电子邮件?
- c# - 在 ef core 2.1 中重写相关子查询
- django - Django HttpResponse:用户单击按钮后下载 Excel
- java - 如何在 Spring Boot 的每个请求中获取当前用户?
- sqlite - 如何配置 sqlite3 的 tcltests?