【问题标题】:CSS background-image to access multiple imagesCSS background-image 访问多个图像
【发布时间】: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


【解决方案1】:

如果我理解正确的话,就是这里。

$('.my-media').html('');
media.forEach(function (mediaItem, mediaItemIndex) {
  var div = $('<div>');
  $(div).addClass("class-a");
  $(div).addClass("class-b");
  $(div).css('background-image', `url(media/${mediaItemIndex}.jpg)`);
  $(".my-media").append(div)
});

【讨论】:

  • 感谢您的回答!我试图实现这一点,但我很挣扎。根据我的理解,我必须编写另一个函数来遍历图像文件名列表并分配一个索引值,然后我可以将其分配给 mediaItemIndex。由于图像文件位于单独的文件夹中,我知道我还必须在某处包含文件路径,但我无法锻炼如何连接这些部分。再次感谢您的建议!
猜你喜欢
  • 2021-03-06
  • 2013-03-09
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多