如何将上传的图片应用于背景图片?

时间:2018-09-01 13:15:44

标签: javascript jquery background-image filereader

我正在使用标准jQuery上载图像,并且希望将其用作标题的背景图像。 Background-image应该接收'url'而不是'src'属性,所以仍然有可能获取?

jQuery代码:

function uploadImage(input){
    if (input.files && input.files[0]) {
     var reader = new FileReader();
     reader.onload = function(e) {
         $('#home-section').attr('background-image...???', e.target.result);
     }
     reader.readAsDataURL(input.files[0]);
    }
}

#home-section是赋予标题的ID。我知道我也可以使用常规的img标签,然后仅使用z-indexes使它像背景图片一样工作,但这是唯一的选择吗?

1 个答案:

答案 0 :(得分:2)

只需将结果Data-URL包装在CSS的url()函数中。还要使用style作为属性名称:

$('#home-section').attr('style', 'background-image:url(' + e.target.result + ')');

但是,更好的方法是将File对象(Blob)与Object-URL一起使用。这样速度更快,并且占用的内存更少。另外,您可以完全放弃Filereader

function uploadImage(input){
  if (input.files && input.files[0]) {
    var url = URL.createObjectURL(input.files[0]);
    $('#home-section').attr('style', 'background-image:url(' + url + ')');
  }
}

function uploadImage(input){
    if (input.files && input.files[0]) {
     var url = URL.createObjectURL(input.files[0]);
     $('#home-section').attr('style', 'background-image:url(' + url + ')');
    }
}

document.querySelector("input").onchange = function(){uploadImage(this)};
#home-section {width:640px; height:480px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>Select image: <input type=file></label><br>
<div id=home-section></div>