使用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