javascript - 如何使用javascript在网格布局中定位div

标签 javascript html css

我正在尝试使用 javascript 构建网格布局,但它不起作用,因为它做了一些有线的事情,它只创建了行的第一个单元格,而不是整行。

代码如下:

<style>
body {
 background-color: rgba(255, 0, 0, 0);
    overflow: hidden;
    z-index: 0;
}

.imgCell {
    position: absolute;
    width: 84px;
    height: 84px;
    background: rgba(200, 50, 50, 1);
    border-radius: 10px;
    padding: 0px;
    -webkit-box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.1);
}

.tdCellName {
    width: 60px;
    height: 60px;
    text-align: center;
    font-size: 30px;
    color: #fff;
    white-space: nowrap;
}

</style>
<script>
function displayIMG() {
    var str = "";
    var m = 0;
    var j = 1;

    for (var i = 0; i <= GlobalImgList.length-1; i++) {

        m = m+1;
        var divsID = "flscell"+i;
        var Img = GlobalImgList[i];

        var posy = "10";
        var posx = parseFloat(Math.abs(10+110*i));

        //how many cells to count until breaking to a new row
        if(m%7 == 0) {
            j = j+1;
                var posx = "10";
                var posy = parseFloat(Math.abs(10+110*i));
            }

                str += "<div id=\""+divsID+"\" class=\"imgCell\" style=\"top: "+posy+"px; left: "+posx+"px; opacity: 1;\">";
                    str += "<div style=\"position: relative; top: 11px; left: 11px;\">";
                        str += "<table cellspacing=0 cellpadding=0 border=0>";
                        str += "<tr>";
                        str += "<td class=\"tdCellName\" align=\"center\">";
                        str += Img;
                        str += "</td>";
                        str += "</tr>";
                        str += "</table>";
                    str += "</div>";
                str += "</div>";
    }
    document.getElementById("main").innerHTML = str;
}
</script>
<body>
<div id="main" style="position: absolute; top: 34px; left: 0px; width: 1879px; height: 1124px; padding: 20px; overflow: scroll;">
</div>
</body>

我迷路了:(请帮助我:)

最佳答案

有很多事情你真的不想在这里做:

首先,您实际上是在使用 CSS 来设置元素的样式,因此要么删除它并将所有样式直接放入标记中,要么考虑使用更多 CSS(例如为表格设置样式,让您的生活更轻松)。例如,您可以使用表格或 CSS flex-box 完全按照您的意愿进行操作,并输出多行 7 列,图像周围有 11px 的填充,带有简单的标记和少量适当的 css 样式简单的线条。

也就是说,您的 JavaScript:

for (var i = 0; i <= GlobalImgList.length-1; i++) {

相反,为什么不直接使用:

for (var i = 0; i < GlobalImgList.length; i++) {

您可以使用

轻松检查
if( (i % 7) === 0 )

并且不需要额外的变量(并且每行的图像数量也不会超出一个,因为您实际上似乎在每个循环中将 m 递增为比 i 多 1,因此无论如何它都不会像您期望的那样呈现。 )

您可能真的希望 j 从 0 而不是 1 开始(因为无论如何您都会在条件中递增它)

var j = 1;    should really be var j = 0;

谈论递增

if(m%7 == 0) {
   j = j+1;
   var posx = "10";
   var posy = parseFloat(Math.abs(10+110*i));
}

你是真的要这样做还是打算根据 j 的值来确定 y 位置,就像这样

if( (i % 7) === 0) {
   posx = 10;
   posy = parseFloat(Math.abs(10+110*j));
   j++;
}

因为您似乎在本地重新定义了 xpos 和 ypos 的变量,然后丢弃了值(当您从大括号中返回时)并且您一直在数字和字符串之间切换。

您总是将每一行的 ypos 连接为“10”,因为它在循环内部,而不是在 str 外部。

不需要将 xpos 和 ypos 用作字符串,然后将它们解析为 float 以计算出位置,然后将它们转回字符串以将您的样式与添加的“px”连接起来 -(只需将它们都保留为数字)。

您可以在字符串中混合使用单引号和双引号,这样可以更轻松地连接字符串,所以不要这样做

"<div id=\""+divsID+"\" class=\"imgCell\" style=\"top: "+posy+"px; left: "+posx+"px; opacity: 1;\">";

试试这个,

'<div id="'+divsID+'" class="imgCell" style="top:'+posy+'px; left: '+posx+'px; opacity:1;">';

如果我正确理解了您的代码,那么您所在行中的每个单元格实际上就是这组巨大的标记

<div id="" class="imgCell" style="top:posy; left:posx; opacity:1">
  <div style="position: relative; top: 11px; left: 11px;">
    <table cellspacing=0 cellpadding=0 border=0>
    <tr>
      <td class="tdCellName" align="center">
        [Img]
      </td>
    </tr>
    </table>
  </div>
</div>

每个元素都是 DIV 内的 DIV,DIV 内有 TABLE,TR 内有单个 TD,其中包含指向图像的链接 ...

既然你使用的是表格,为什么不把整个东西渲染成表格,然后给表格,然后给单元格一些 11px 的填充。或者更好的办法是去掉那个,把你的图像直接放在第二个 div 下,然后将样式属性应用到那个 div 来设置你想要的间距和位置效果。

为了让您的生活变得简单,只需为前两个图像创建一个循环,然后调试代码以查看您是否 A) 获得了您期望的 xpos 和 ypos 值。 B) 您获得的字符串中包含所有 DIVS,并应用了正确的样式属性。

如果您按照建议简化代码并清理标记,那么这可能是对几个元素的快速视觉检查

关于javascript - 如何使用javascript在网格布局中定位div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31424059/

相关文章:

javascript - 缩放窗口时保持 3 个元素中的 2 个元素之间的距离相等(响应式)

html - 如何并排创建两个 div,其中一个 div 延伸到页面宽度?

javascript - 用于定位相邻小写和大写 Char 的正则表达式

javascript - 在 Openshift 上上传文件

javascript - fancybox 内的 Fancybox(或嵌套的 fancybox)

javascript - 在 javascript 中的文本框 textchange 事件上选中=True

html - 为什么我的菜单项位于实际菜单栏 (CSS) 下方?

html - 我如何使网格响应?

html - 如何修复没有样式的 html 工具提示?

html - 如何在 R 中更改 Shiny 仪表板上的背景颜色