【问题标题】:Changing background image of HTML document from list of filenames using JavaScript使用 JavaScript 从文件名列表更改 HTML 文档的背景图像
【发布时间】:2018-03-23 17:50:44
【问题描述】:

我对 JavaScript 很陌生,我正在做一个简单的项目。基本上我有一个 HTML 文档,我想在每次从位于“背景”的目录中打开随机图片时更改背景图像。

function main()
{
    // Creates a list of filenames from the 'Background/' dir and gets a 
    // random index in the list
    var fs = require('fs');
    var fileList = fs.readdirSync('/Background/');
    var len = fileList.length;
    var index = Math.floor(Math.random() * len);

    var filePath = "Background/" + fileList[index];

    document.body.style.backgroundImage = "url(filePath)";
    document.body.style.backgroundSize = "cover"
}

$(document).ready(main);

无论出于何种原因,它似乎都不起作用。我很难弄清楚 URL 类是如何工作的,因为我认为它与此有关。我没有收到任何错误。执行此操作时,我将背景图像更改为特定图像:

document.body.style.backgroundImage = "url('Background/green.jpg')";

但当我尝试随机检索文件名时不会。 我确定这只是对语言或其他什么的误解,但我似乎无法弄清楚。谢谢。

【问题讨论】:

  • 我不确定您希望节点如何在浏览器中运行....
  • @epascarello 的观点——fs(或文件系统)是一个 Node.js(服务器端)特定的工具。您将需要另一种方法来捕获图像的文件名(管理列表、创建服务......)
  • @Doug 哦,有趣。感谢您实际解释错误背后的原因。您有什么具体的工具或方法推荐吗?
  • 如果文件名不会经常更改,最简单的方法是创建一个名称数组并使用 Math.random() 从中进行选择。如果您不知道名称的频率或名称(半可靠级别),那么您可以使用 Node.js(或其他服务器端语言)创建一个服务,该服务将向您返回一个随机文件名,基于关于您目录中存在的内容。

标签: javascript html css file background


【解决方案1】:

您不能在浏览器中以这种方式使用 fs。您需要存储图像路径。您可以将它们存储在数据库中或 javascript 文件中的数组中。以下示例将文件名存储在数组中。

function main()
{
    var images = ['image1.jpeg', 'image2.jpg', 'bg.png'] //storing only names
    var index = Math.floor(Math.random() * images.length)
    var filePath = "Background/" + images[index]; //creating full path
    document.body.style.background = 'url("'+filePath+'")'
    // if background-size is not changing, it's better to store it in .css file
}

$(document).ready(main);

【讨论】:

  • 另外,如果你想将文件名存储在数据库中,你可以将名称加载到图像数组中,所以我的代码示例不会改变。
  • 谢谢,但是我希望能够简单地将新图片拖到文件夹中,如果我需要添加任何图片并且它仍然可以工作。因此,我试图检索文件名而不是硬编码它们的原因。数据库能够解决这个问题吗?
  • 可能有点晚了,抱歉。无论如何,要使用数据库,您将需要一个服务器应用程序,将前端与数据库连接起来。在服务器端,您可以创建返回文件路径的函数。此函数应该: * 在背景目录中创建文件名数组 * 生成从 0 到文件名数组的随机数 - 1 * 获取在前一步位置生成的数组元素 * 带有完整路径的连接名称,因此对于 src 属性将是正确的 * 返回前端的完整路径
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多