【问题标题】:How to dynamically set background image url in CSS using Javascript如何使用 Javascript 在 CSS 中动态设置背景图片 url
【发布时间】:2019-02-20 02:58:22
【问题描述】:

我已经尝试了一段时间。

我认为以下代码会起作用,因为我从输入中获取值并将背景图像 URL 设置为所述值。

谢谢!

head 标签内的代码。

<script  type="text/javascript">

 function loadImg() {

  var imageUrl = $('#hostImage').attr('value')

  document.getElementById("upload-success-bg").style.backgroundImage=imageUrl

}

</script>

<style>

 #upload-success-bg {
 background-image: url();
 }

</style>

输入域代码

<div class="status">

 <input class="image-url" type="text" id="hostImage" name="hostImage" required="true" 
 value="URL LOADS HERE">

</div>

我想在哪里显示图像

<div class="dropzone upload-success" id="upload-success-bg">
            <div class="info"><p>Drag image file here</p><p>Or click here to select image</p></div>
<input type="file" required="" class="input" accept="image/*"></div>

【问题讨论】:

  • 两个问题是,如果代码在 &lt;head&gt; 元素中,则该元素在 DOM 中尚不存在,并且该函数似乎没有在问题的 JavaScript 中调用。除了 CSS url() 函数没有被用来设置 background-image 属性的值。
  • “我想在哪里显示图像”是什么意思&lt;input type="text"&gt; 元素的用途是什么,该元素的.value&lt;input type="file"&gt; 元素和显示图像有什么关系?
  • @guest271314 div "dropzone upload-success" 是用户拖动图片文件上传的地方。当用户上传图片时,图片的 URL 变为 的值。我想把这个 url 作为 dropzone div 的背景。
  • @machina &lt;input type="text"&gt; 元素不是必需的。 File 对象没有 URL 属性。可以创建指向上传文件的Blob URLdata URLBlob URLs 的生命周期与创建 URL 的 document 相关联。一个data URL 代表一个data:MIME 类型,可能是&lt;charset&gt; &lt;base64|text&gt; 文件的编码。

标签: javascript html


【解决方案1】:

如果您希望为 backgoundbackground-color CSS 属性使用 URL,即使在 javascript 中也必须使用 url() 语法,因此将代码更改为以下内容应该可以:

document.getElementById("upload-success-bg").style.backgroundImage = "url(" + imageUrl + ")"

【讨论】:

    【解决方案2】:

    在jquery中,你可以这样做:

     function loadImg() {
    
      var imageUrl = $('#hostImage').attr('value')
    
      $("#upload-success-bg").css("background-image", "url(" + imageUrl + ")");
    
    }
    

    【讨论】:

      【解决方案3】:

      File 对象没有 URL 属性。可以创建指向上传文件的Blob URLdata URLBlob URLs 的生命周期与创建 URL 的 document 相关联。一个data URL 字符串

      data:[<mediatype>][;base64],<data>
      

      可以在不同的window 或浏览器中打开。

      您可以使用FileReaderFile 对象转换为data URL 并将&lt;input type="text"&gt; value 设置为FileReader 实例result

      const input = document.querySelector("#file");
      const [label] = input.labels;
      const upload = document.querySelector("#upload-success-bg");
      const uploadURL = document.querySelector("#hostImage");
      const reader = new FileReader();
      
      reader.addEventListener("load", e => {
        const {result} = reader;
        upload.style.backgroundImage = `url(${result})`;
        hostImage.style.width = `calc(${result.length}px)`;
        hostImage.value = result;
      });
      
      input.addEventListener("change", e => {
        const [file] = input.files;
        console.log(file)
        if (file && /^image/.test(file.type)) {
          reader.readAsDataURL(file);
        }
      });
      #file {
        display: none;
      }
      
      label[for="file"] {
        white-space: pre;
      }
      <div class="dropzone upload-success" id="upload-success-bg">
        <label class="info" for="file">
          Drag image file here
          Or click here to select image
        </label>
        <input type="file" required="" id="file" class="input" accept="image/*"></div>
      <div class="status">
        <input class="image-url" type="text" id="hostImage" name="hostImage" required="true" readonly="true" value="URL LOADS HERE">
      </div>

      【讨论】:

      • 我应该提到我正在使用带有 Imgur API 的脚本,当用户选择文件时,它会上传到 Imgur 并返回图像 URL。
      • @machina 见stackoverflow.com/help/how-to-askstackoverflow.com/help/mcve。这不会影响答案中的代码。您可以在 FileReader load 事件处理程序中包含执行异步任务的代码,并将 hostImage.value 设置为响应文本。
      • @machina (async() =&gt; { try { const request = await fetch("/path/to/server", {method:"POST", body:file}); const result = await request.text(); upload.style.backgroundImage = `url(${result})`; hostImage.style.width = `calc(${result.length}px)`; hostImage.value = result; } catch(e) {console.error(e)} })()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2011-10-21
      • 2020-09-20
      • 2011-09-14
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多