1. 程式人生 > >原生JS判斷頁面中圖片載入完成

原生JS判斷頁面中圖片載入完成

自己寫的判斷頁面中圖片載入完成的方法,用原生JS完成,不用jq主要考慮在不載入jq的情況下,程式碼可以正常執行

判斷指定ID的盒子中所有圖片載入,demo程式碼如下:

<!DOCTYPE HTML>
<html> 
<head> 
<meta charset="utf-8">
<title>頁面圖片載入完成測試</title>
</head> 
<body>
<div id="loadingBox" style="display:none;">
    <img src="public/img/1.png" />
    <img src="public/img/2.png" />
    <img src="public/img/3.png" />
    <img src="public/img/4.png" />
    <img src="public/img/5.png" />
</div>


<script type="text/javascript">
//'loadingBox' => 存放 指定要載入的圖片 的上級盒子 ID
getImgLoadEd('loadingBox',function(){
	alert('所有載入完成');
});
//判斷 指定要載入的圖片 是否載入完成
function getImgLoadEd(loadingBox,callback){
	//存放 指定要載入的圖片 的盒子
	var imgAll   = document.getElementById(loadingBox);
	//指定要載入的圖片 的數量
	var imgL     = imgAll.children.length;
	//指定要載入的圖片 起始 key
	var imgStart = 0;
	//單張 指定要載入的圖片 是否載入完成(如果沒有,則定時器不斷執行的方法IfLoadImg時,會在方法中有判斷此變數布林值,並提前中止不再住下做多餘的執行 , 直到此圖片載入完成後才會往下執行,要載入圖片的KEY才會+1)
	var isLoad   = false;
	//定時器執行的 載入圖片 方法
	function IfLoadImg(){
		//所有圖片載入完畢
		if(imgStart >= imgL){
			console.log('圖片載入完成,圖片總數量:' + imgStart);
			clearInterval(loadTimer);
			if(callback){
				callback();
			}
			return;
		}
		
		console.log('上張圖片是否載入完成:' + isLoad);
		console.log('當前載入圖片KEY:' + imgStart);
		
		//單張 指定要載入的圖片 未載入完成時,不再往下執行
		if(!isLoad && imgStart != 0){
			return;
		//單張 指定要載入的圖片 載入完成後,繼續往下執行 1 次
		}else{
			isLoad = false
		}
		//根據 指定要載入的圖片 的KEY 載入圖片的方法
		loadImg(imgStart);
		function loadImg(imgKey){
			var curImg  = imgAll.children[imgKey].src;
			var loadImg = new Image();
			loadImg.src = curImg;
			loadImg.onload = function(){
				//單張 指定要載入的圖片 載入完成後,設定KEY + 1,並設定是否載入成功的變數為true
				isLoad = true;
				imgStart++;
			}
		}
	}
	//定時器執行 指定要載入的 單張 圖片  方法
	var loadTimer = setInterval(IfLoadImg,10);
}

</script>
</body>
</html>
 

給出要判斷載入圖片URL陣列,根據每個URL載入圖片,JS程式碼如下:

getImgLoadEd(function(){
	alert('所有載入完成');
});
function getImgLoadEd(callback){
	var imgAll = [
					'public/image/bg1.jpg',
					'public/image/bg2.jpg',
					'public/image/bg3.jpg',
					'public/image/bg4.jpg',
					'public/image/bg5.jpg',
					'public/image/bg6.jpg',
					'public/image/bg7.jpg',
					'public/image/bg8.jpg',
					'public/image/bg9.jpg',
					'public/image/bg10.jpg',
				];
	var imgL = imgAll.length;
	var imgStart = 0;
	var isLoad   = false;
	var bfb = 0;
	function IfLoadImg(){
		if(imgStart >= imgL){
			console.log('圖片載入完成,圖片總數量:' + imgStart);
			clearInterval(loadTimer);
			if(callback){
				callback();
			}
			return;
		}
		
		//console.log('上張圖片是否載入完成:' + isLoad);
		//console.log('當前載入圖片KEY:' + imgStart);
		
		if(!isLoad && imgStart != 0){
			return;
		}else{
			isLoad = false
		}
		loadImg(imgStart);
		function loadImg(imgKey){
			var curImg = imgAll[imgKey];
			var loadImg = new Image();
			loadImg.src = curImg;
			loadImg.onload = function(){
				isLoad = true;
				imgStart++;
				bfb = parseInt(imgStart / imgL * 100);
				console.log(bfb + '%');
				$('.page1_text').html(bfb + '%');
			}
		}
	}
	var loadTimer = setInterval(IfLoadImg,10);
}