JS怎么实现网页加载的进度百分比

JavaScript015

JS怎么实现网页加载的进度百分比,第1张

一般这种网站都是图片特别多而且质量很高导致加载慢。

所以

我们基本监听图片加载进度就可以达到比较好的效果。

而图片我们可以采用预加载

(也就是浏览器可以缓存,到真的要用的时候会自动从缓存读取)

那么我们只要检测预加载图片的进度就可以了

代码基本如下:

var

imgs

=

["1.jpg","2.jpg"]

for(var

i=0i<imgs.lengthi++){

var

img

=

new

Image()

img.onload

=

function(){

//图片加载完毕

此时更新进度条

}

img.src

=

imgs[i]

}

一、load事件

<script type="text/javascript">

$('img').onload = function() {

//code

}

</script>

优点:简单易用,不影响HTML代码。

缺点:只能指定一个元素,javascipt代码必须置于图片元素的下方

二、jquery方法

<script type="text/javascript">

$(function(){

$('.pic1').each(function() {

$(this).load(function(){

$(this).fadeIn()

})

})

})

</script>

注意,不要在$(document).ready()里绑定load事件。

优点:可以批量绑定元素事件,并且不影响HTML代码内容

缺点:需要jquery库的支持,代码需要放置到需要操作元素的下方。

三、readystatechange事件

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-">

<title>img - readystatechange event</title>

</head>

<body>

<img id="img" src="http://pic.win.com/wallpaper/f/cbbaea.jpg">

<p id="p">loading...</p>

<script type="text/javascript">

img.onreadystatechange = function() {

if(img.readyState=="complete"||img.readyState=="loaded"){

p.innerHTML = 'readystatechange:loaded'

}

}

</script>

</body>

</html>

readyState为complete和loaded则表明图片已经加载完毕。测试IE6-IE10支持该事件,其它浏览器不支持。

四、img的complete属性

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8">

<title>img - complete attribute</title>

</head>

<body>

<img id="img1" src="http://pic1.win4000.com/wallpaper/f/51c3bb99a21ea.jpg">

<p id="p1">loading...</p>

<script type="text/javascript">

function imgLoad(img, callback) {

var timer = setInterval(function() {

if (img.complete) {

callback(img)

clearInterval(timer)

}

}, 50)

}

imgLoad(img1, function() {

p1.innerHTML('加载完毕')

})

</script>

</body>

</html>

轮询不断监测img的complete属性,如果为true则表明图片已经加载完毕,停止轮询。该属性所有浏览器都支持。

全都是判断width==0,显然没戏。

估计是运行速度问题,无论图片是否存在js都是按不存在处理,因为width=null。

正确的方法依然是使用onerror:即建立html标记<img src="与背景图片同名" onerror="document.body.style.backgroundImage='url(其他图片路径/名)'" style="display:none">