【发布时间】:2021-08-15 18:07:26
【问题描述】:
我正在 forEach 循环中创建一个 div 来保存图像(每个图像都有自己的 div)。图像保存在单独的文件夹“媒体”中。通过以我在下面代码中的方式设置背景图像的 url,我可以访问单个图像,因此所有 div 都填充了相同的图像。
有没有办法通过 url 用单独的图像填充每个创建的 div?创建的 div 数量与媒体文件中的图像数量相同。
$('.my-media').html('');
media.forEach(function (mediaItem) {
var div = $('<div>');
$(div).addClass("class-a");
$(div).addClass("class-b");
$(div).css('background-image', 'url(media/0.jpg)');
$(".my-media").append(div)
});
}
**更新 - 我已将代码更改为:
$('.my-media').html('');
media.forEach(function (mediaItem) {
var div = $('<div>');
$(div).addClass("class-a");
$(div).addClass("class-b");
for (let i=0; i < mediaItemIndex.length; i++){
$(div).css('background-image', `url('media/${mediaItemIndex[i]}.jpg')`);
}
$(".my-media").append(div)
});
}
where
``` var mediaItemIndex = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24']
但这现在只显示所有 div 的最终图像。同样,我们将不胜感激任何和所有帮助/建议。
最终更新:我已经解决了这个问题。
图像的路径文件存储在“media_url”下的对象数组中。通过使用.replace("../",""),我摆脱了文件路径中不必要的部分并且可以访问图像。
我最初尝试访问图像的方式失败了,因为它在循环中创建了一个循环。 forEach 循环已经在遍历图像,所以当我使用 for(let i =0;... 时,我创建了一个只显示最终图像的无限循环。
替换此行$(div).css('background-image', 'url(media/0.jpg)');
用我第一次编辑的这一行
$(div).css('background-image', `url(${mediaItem.media_url.replace("../","")})`);
表示每张图片只显示一次 - 即问题已解决。
感谢大家的建议!
【问题讨论】:
-
JS如何知道图片的URL应该是什么?这是
mediaItem值包含的内容吗? -
您是要求JS能够读取文件目录,还是您知道文件被称为0.jpg,1.jpg一直到n.jpg,其中n+1是已经创建的 div 数量还是要创建的 div?
-
@RoryMcCrossan 老实说,我不知道。这是一个 main.js 文件的 sn-p,作为使用 API 的项目的一部分,我必须重建它。我是一个真正的新手,所以请原谅我糟糕的行话。 mediaItem 在其他地方作为函数参数传递,但从未定义。根据它在其他地方的使用方式,它似乎是指单个图像文件,但同样,它在任何地方都没有定义。
-
@AHaworth 这些文件按时间顺序命名,从 0.jpg 到 24.jpg。 div 是在设置 url 路径的同一函数中创建的。再次道歉,如果我的行话不是很好,我对此很陌生
-
媒体在哪里定义?你从什么 HTML 开始?
标签: html jquery css foreach background-image