使用javaScript加载背景图像进度跟踪

使用javaScript加载背景图像进度跟踪,javascript,html,Javascript,Html,如何跟踪背景图像加载进度?到目前为止,我一直在关注并编写下面的代码 var progressbar=document.querySelector('imgload'); var img=document.createElement('img'); img.onloadstart=函数(){ progressbar.innerHTML=0; }; img.onload=函数(){ document.body.style.backgroundImage='url(“High-Res Wallpap

如何跟踪背景图像加载进度?到目前为止,我一直在关注并编写下面的代码

var progressbar=document.querySelector('imgload');
var img=document.createElement('img');
img.onloadstart=函数(){
progressbar.innerHTML=0;
};
img.onload=函数(){
document.body.style.backgroundImage='url(“High-Res Wallpaper HD For Desktop.jpg”);
//img.parentElement.removeChild(img);
};
img.onprogress=功能(e){
if(如长度可计算){
progressbar.innerHTML=e.loaded/e.total*100;
}
};
img.onloadend=函数(){
progressbar.innerHTML=100;
};
img.src='High Res Wallpaper HD For Desktop.jpg'
.container{
保证金:0自动;
宽度:900px;
}

背景图像加载进度
Lorem ipsum Door sit amet,为精英们献身,为埃乌斯莫德服务
暂时性的劳工和财产损失。我们在这里吃得很少,
他在乌拉姆科实验室实习,并在普通实验室实习
康塞奎特。在沃鲁帕特·维利特·埃塞的《雷德亨德瑞特》中,两人或两人互为受害者
纤毛多洛雷欧盟福吉亚无巴黎。圣奥卡塔铜塔除外
傲慢的人,必须为自己的行为负责

图像加载的百分比:
我以为图像元素有进度事件。但事实并非如此。文章说,

HTML图像元素缺少进度事件。Web平台团队位于 Adobe建议将图像进度事件添加到HTML5规范和 在浏览器中实现它们

所以我用他的解决方案来回答我自己的问题

var request;
var progressbar = document.querySelector('#imgload');

function loadImage(imageURI)
{
    request = new XMLHttpRequest();
    request.onloadstart = showProgressBar;
    request.onprogress = updateProgressBar;
    request.onload = showImage;
    request.onloadend = hideProgressBar;
    request.open("GET", imageURI, true);
    request.overrideMimeType('text/plain; charset=x-user-defined'); 
    request.send(null);
}

function showProgressBar()
{
    progressbar.innerHTML = 0;
}

function updateProgressBar(e)
{
    if (e.lengthComputable){
        progressbar.innerHTML = e.loaded / e.total * 100;
    }
}

function showImage()
{
    var imageElement = "data:image/jpeg;base64," + base64Encode(request.responseText);
    document.body.style.backgroundImage='url("' + imageElement + '")';
}

function hideProgressBar()
{
    progressbar.innerHTML = 100;
}

// This encoding function is from Philippe Tenenhaus's example at http://www.philten.com/us-xmlhttprequest-image/
function base64Encode(inputStr) 
{
   var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
   var outputStr = "";
   var i = 0;

   while (i < inputStr.length)
   {
       //all three "& 0xff" added below are there to fix a known bug 
       //with bytes returned by xhr.responseText
       var byte1 = inputStr.charCodeAt(i++) & 0xff;
       var byte2 = inputStr.charCodeAt(i++) & 0xff;
       var byte3 = inputStr.charCodeAt(i++) & 0xff;

       var enc1 = byte1 >> 2;
       var enc2 = ((byte1 & 3) << 4) | (byte2 >> 4);

       var enc3, enc4;
       if (isNaN(byte2))
       {
           enc3 = enc4 = 64;
       }
       else
       {
           enc3 = ((byte2 & 15) << 2) | (byte3 >> 6);
           if (isNaN(byte3))
           {
               enc4 = 64;
           }
           else
           {
               enc4 = byte3 & 63;
           }
       }

       outputStr += b64.charAt(enc1) + b64.charAt(enc2) + b64.charAt(enc3) + b64.charAt(enc4);
    } 

    return outputStr;
}

window.onload = function(){
    loadImage('High-Res-Wallpaper-HD-For-Desktop.jpg');
}
var请求;
var progressbar=document.querySelector('#imgload');
函数loadImage(imageURI)
{
请求=新的XMLHttpRequest();
request.onloadstart=showProgressBar;
request.onprogress=updateProgressBar;
request.onload=showImage;
request.onloadend=hideProgressBar;
打开(“GET”,imageURI,true);
request.overrideMimeType('text/plain;charset=x-user-defined');
请求发送(空);
}
函数showProgressBar()
{
progressbar.innerHTML=0;
}
函数updateProgressBar(e)
{
if(如长度可计算){
progressbar.innerHTML=e.loaded/e.total*100;
}
}
函数showImage()
{
var imageElement=“data:image/jpeg;base64,”+base64编码(request.responseText);
document.body.style.backgroundImage='url('+imageElement+'');
}
函数hideProgressBar()
{
progressbar.innerHTML=100;
}
//此编码函数来自Philippe Tenenhaus在http://www.philten.com/us-xmlhttprequest-image/
函数base64编码(inputStr)
{
var b64=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz012456789+/=”;
var outputStr=“”;
var i=0;
while(i>2;
var enc2=((字节1和字节3)>4);
var enc3、enc4;
if(isNaN(字节2))
{
enc3=enc4=64;
}
其他的
{
enc3=((字节2和字节15)>6);
if(isNaN(字节3))
{
enc4=64;
}
其他的
{
enc4=字节3和字节63;
}
}
输出str+=b64.charAt(enc1)+b64.charAt(enc2)+b64.charAt(enc3)+b64.charAt(enc4);
} 
返回outputStr;
}
window.onload=函数(){
loadImage('High-Res-wallper-HD-For-Desktop.jpg');
}

我以为图像元素有进度事件。但事实并非如此。文章说,

HTML图像元素缺少进度事件。Web平台团队位于 Adobe建议将图像进度事件添加到HTML5规范和 在浏览器中实现它们

所以我用他的解决方案来回答我自己的问题

var request;
var progressbar = document.querySelector('#imgload');

function loadImage(imageURI)
{
    request = new XMLHttpRequest();
    request.onloadstart = showProgressBar;
    request.onprogress = updateProgressBar;
    request.onload = showImage;
    request.onloadend = hideProgressBar;
    request.open("GET", imageURI, true);
    request.overrideMimeType('text/plain; charset=x-user-defined'); 
    request.send(null);
}

function showProgressBar()
{
    progressbar.innerHTML = 0;
}

function updateProgressBar(e)
{
    if (e.lengthComputable){
        progressbar.innerHTML = e.loaded / e.total * 100;
    }
}

function showImage()
{
    var imageElement = "data:image/jpeg;base64," + base64Encode(request.responseText);
    document.body.style.backgroundImage='url("' + imageElement + '")';
}

function hideProgressBar()
{
    progressbar.innerHTML = 100;
}

// This encoding function is from Philippe Tenenhaus's example at http://www.philten.com/us-xmlhttprequest-image/
function base64Encode(inputStr) 
{
   var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
   var outputStr = "";
   var i = 0;

   while (i < inputStr.length)
   {
       //all three "& 0xff" added below are there to fix a known bug 
       //with bytes returned by xhr.responseText
       var byte1 = inputStr.charCodeAt(i++) & 0xff;
       var byte2 = inputStr.charCodeAt(i++) & 0xff;
       var byte3 = inputStr.charCodeAt(i++) & 0xff;

       var enc1 = byte1 >> 2;
       var enc2 = ((byte1 & 3) << 4) | (byte2 >> 4);

       var enc3, enc4;
       if (isNaN(byte2))
       {
           enc3 = enc4 = 64;
       }
       else
       {
           enc3 = ((byte2 & 15) << 2) | (byte3 >> 6);
           if (isNaN(byte3))
           {
               enc4 = 64;
           }
           else
           {
               enc4 = byte3 & 63;
           }
       }

       outputStr += b64.charAt(enc1) + b64.charAt(enc2) + b64.charAt(enc3) + b64.charAt(enc4);
    } 

    return outputStr;
}

window.onload = function(){
    loadImage('High-Res-Wallpaper-HD-For-Desktop.jpg');
}
var请求;
var progressbar=document.querySelector('#imgload');
函数loadImage(imageURI)
{
请求=新的XMLHttpRequest();
request.onloadstart=showProgressBar;
request.onprogress=updateProgressBar;
request.onload=showImage;
request.onloadend=hideProgressBar;
打开(“GET”,imageURI,true);
request.overrideMimeType('text/plain;charset=x-user-defined');
请求发送(空);
}
函数showProgressBar()
{
progressbar.innerHTML=0;
}
函数updateProgressBar(e)
{
if(如长度可计算){
progressbar.innerHTML=e.loaded/e.total*100;
}
}
函数showImage()
{
var imageElement=“data:image/jpeg;base64,”+base64编码(request.responseText);
document.body.style.backgroundImage='url('+imageElement+'');
}
函数hideProgressBar()
{
progressbar.innerHTML=100;
}
//此编码函数来自Philippe Tenenhaus在http://www.philten.com/us-xmlhttprequest-image/
函数base64编码(inputStr)
{
var b64=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz012456789+/=”;
var outputStr=“”;
var i=0;
while(i>2;
var enc2=((字节1和字节3)>4);
var enc3、enc4;
if(isNaN(字节2))
{
enc3=enc4=64;
}
其他的
{
enc3=((字节2和字节15)>6);
if(isNaN(字节3))
{
enc4=64;
}
其他的
{
enc4=字节3和字节63;
}
}
outputStr+=b64.charAt(enc1)+b64.charAt(enc2)+b64.charAt(enc3)+b64.charAt(enc4