Javascript循环行和列

时间:2010-11-28 21:35:46

标签: javascript image while-loop

好的,我有一个JSON文件,里面有15个图片的网址。我想要实现的是这样......

1-2-3
4-5-6
7-8-9
10-11-12
13-14-15

所以我有3列和5行图像。我知道我必须遍历图像来获取它们,但我如何将它们构建成行,以便每行中有3个图像。我使用简单的JavaScript而不是jquery或任何其他框架。非常感谢帮助。

2 个答案:

答案 0 :(得分:2)

编辑:在重新阅读问题和一些评论之后,我相信OP希望用HTML呈现图像,而不是简单地放在二维数组中。

给出以下HTML:

<div id="images_container"></div>

您可以使用带有图像数据的JSON数组,并执行以下操作:

var data = [
    'http://farm4.static.flickr.com/3594/3498411074_f10d546f42_t.jpg',
    'http://farm4.static.flickr.com/3364/3498396436_44bcdcc06f_t.jpg',
    'http://farm4.static.flickr.com/3436/3356022463_cd53a9b57d_t.jpg',
    'http://farm4.static.flickr.com/3422/3356840596_57f5da7842_t.jpg',
    'http://farm4.static.flickr.com/3180/2776515140_b7cd27cf7e_t.jpg',
    'http://farm4.static.flickr.com/3273/2758309734_48cfe16860_t.jpg',
    'http://farm4.static.flickr.com/3156/2758267414_6320ce7bdd_t.jpg'];

var images = document.createElement("div");
images.setAttribute("id", "images");

var img;

for(var index = 0; index < data.length; index++) {
    // If three images have been placed on a row,
    // create a new row.
    if (index % 3 === 0) {
        row = document.createElement("div");
        row.setAttribute("class", "images-row");
        images.appendChild(row);        
    }
    // replace 'data[index]' with the url of the image in each member of the array.
    img = createImageElement(data[index]);
    row.appendChild(img);
}

images.appendChild(row);
document.getElementById("images_container").appendChild(images);

// Creates an image element with the given url.
function createImageElement(url) {
    img = document.createElement("img");
    img.setAttribute("src", url);
    img.setAttribute("alt", "image");
    return img;
}

注意“数据”可以替换为实际数据。我给每个图像行一个images-row类。使用这个CSS类,您可以将所需的任何样式应用于行中的每一行和每个图像。

另请注意此代码类型假设具有相同宽度和高度的图像。如果图像大小不同,逻辑不会破坏,但演示文稿看起来有点时髦(这就是CSS可能进入的地方)。

答案 1 :(得分:1)

我不保证这会起作用(我现在很累),但这样的事情可以解决问题:

// let's say that arr == [0,1,2,3,4,5,6,7,8]
result = []
for(i=0; i<=arr.length-step; i+=step)
{
    row = []
    for(j=i; j<i+step && j<arr.length; i++)
        row.push(arr[j]); // or arr[j].image_url or whatever you need
    result.push(row);
}
// result is now something like [[0,1,2],[3,4,5],[6,7,8]]