javascript - 将文件输入设置为 HTML 元素的背景

标签 javascript html css file-upload

我正在创建一个用户界面,用户希望使用<input type="file">上传她的个人资料图片。单击其相应的 <label> 。我想显示图像的预览作为相同的背景<label> 。我尝试使用 inputNode.files[0]在 JavaScript 中,但它不起作用。

我还在开发一个按钮X,它清除所选文件字段值,本质上也清除背景图像,但这是目标的下一步。也欢迎就此提供一些指导,因为我也没有考虑过这一点。

document.getElementById("avatar").onchange = function(e) {
  console.log("file changed", e.target.files[0]);
  // document.getElementById("preview-img");
  document.getElementById("avatar-label").style.backgroundImage = e.target.files[0];
  // document.getElementById("avatar-label").style.backgroundImage = 'url("https://picsum.photos/70/70")';
};
#avatar {
  display: inline-block;
  height: 0;
  width: 0;
}

#avatar-label {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 70px;
  width: 70px;
  border: solid 1px #333;
  /*background: url('https://picsum.photos/70/70');*/
}

#avatar-label:hover {
  cursor: pointer;
}


/* styling for unselecting the image */

#avatar-label #unselect-image {
  display: none;
  position: absolute;
  top: 0;
  right: 0;
  border: none;
  outline: none;
  background: #fff;
}
<form action="" method="get">
  <input accept="image/*" type="file" name="avatar" id="avatar">
  <label for="avatar" id="avatar-label">
    +
    <button type="button" id="unselect-image">X</button>
  </label>
  <img src="" alt="" id="preview-img">
</form>

最佳答案

在后台显示

使用文件读取器而不是直接分配图像对象。

您可以更改脚本以显示背景图像,如下所示

document.getElementById('avatar').onchange = function (e){
    var file = e.target.files[0];

    var reader = new FileReader();
    reader.onloadend = function(){
        document.getElementById('avatar-label').style.backgroundImage = "url(" + reader.result + ")";
        document.getElementById('unselect-image').style.display = "inline";
    }
    if(file){
        reader.readAsDataURL(file);
    }
}

清除背景

为了清除背景图像,以下脚本可能会有所帮助

document.getElementById('unselect-image').onclick = function (){
    document.getElementById('avatar-label').style.background = "none";
    document.getElementById('unselect-image').style.display = "none";
};

关于javascript - 将文件输入设置为 HTML 元素的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68364966/

相关文章:

jquery - 使用 jQuery 在向上滚动和向下滚动时添加不同的 CSS 动画

javascript - 从嵌套的 for 循环中跳出

javascript - 如何防止访问者通过检查员查看我的网站?

javascript - 将鼠标悬停在选项内容上时下拉框消失

javascript - placehold.it 打印非英文单词

javascript - 无法在 cropit.js 中缩放小图像

css - 忽略父 div 的溢出表

javascript - 如何在JS中基于 bool 值自动在单词之间插入逗号或&符号?

html - 表格单元格元素的大小问题,为什么?

javascript - 如果没有编程经验,我应该使用哪种 CMS 来管理小型 Internet 站点?