大概的實現方式是
在頁面的load沒有觸發之前
然後
這 裡比較麻煩地方是
在這裡我是將元素的所有父級元素的offsetTop之和來獲得文檔絕對位置的
//取元素的頁面絕對 X位置
var getLeft = function(El){
var left =
do{
left += El
}while((El = El
return left;
};
//取元素的頁面絕對 Y位置
var getTop = function(El){
var top =
do{
top += El
}while((El = El
return top;
};
在設置窗口的scroll事件時
接下來是要獲得浏覽器顯示窗口現對於文檔的位置
//讀取滾動條的位置和浏覽器窗口的顯示大小
var top = isGoo ? document
left = isGoo ? document
width = document
height = document
谷歌浏覽器要通過body來獲得scrollTop
最後迭代判斷img的位置
//對所有圖片進行批量判斷是否在浏覽器顯示區域內
for(var i=
var _top = getTop(imgs[i])
//判斷圖片是否在顯示區域內
if( _top >= top &&
_left >= left &&
_top <= top+height &&
_left <= left+width){
var _src = imgs[i]
//如果圖片已經顯示
if(imgs[i]
imgs[i]
}
}
}
可以運行的代碼
<!DOCTYPE html PUBLIC "
<html>
<head>
<title>js圖片延遲加載</title>
</head>
<body>
<table id="out
<tr>
<td><img src="
<td><img src="
</tr>
<tr>
<td><img src="
<td><img src="
</tr>
<tr>
<td><img src="
<td><img src="
</tr>
<tr>
<td><img src="
<td><img src="
</tr>
<tr>
<td><img src="
<td><img src="
</tr>
<tr>
<td><img src="
<td><img src="
</tr>
<tr>
<td><img src="
<td><img src="
</tr>
<tr>
<td><img src="
<td><img src="
</tr>
<tr>
<td><img src="
<td><img src="
</tr>
<tr>
<td><img src="
<td><img src="
</tr>
<tr>
<td><img src="
<td><img src="
</tr>
<tr>
<td><img src="
<td><img src="
</tr>
</table>
<table id="out
<tr>
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
<td><img src="
</tr>
</table>
</body>
</html>
<script type="text/javascript">
function delayload(option){
//讀取參數
//圖片未加載時顯示的圖片
var src = option
//指定那些id下的img元素使用延遲顯示
id = option
//圖片列表
var imgs = [];
//獲得所有的圖片元素
for(var i=
var idbox = document
if(idbox && (_imgs = idbox
for(var t=
imgs
}
}
}
//將所有的圖片設置為指定的loading圖片
for(var i=
//圖片本來的圖片路徑放入_src中
imgs[i]
imgs[i]
}
//取元素的頁面絕對 X位置
var getLeft = function(El){
var left =
do{
left += El
}while((El = El
return left;
};
//取元素的頁面絕對 Y位置
var getTop = function(El){
var top =
do{
top += El
}while((El = El
return top;
};
//是否為ie
var isIE = !!navigator
isIE && (isIE = RegExp
//是否為chrome
var isGoo = !!navigator
//獲得可以觸發scroll事件的對象
var box = isIE ? document
//body元素的scroll事件
var onscroll = box
//讀取滾動條的位置和浏覽器窗口的顯示大小
var top = isGoo ? document
left = isGoo ? document
width = document
height = document
//對所有圖片進行批量判斷是否在浏覽器顯示區域內
for(var i=
var _top = getTop(imgs[i])
//判斷圖片是否在顯示區域內
if( _top >= top &&
_left >= left &&
_top <= top+height &&
_left <= left+width){
var _src = imgs[i]
//如果圖片已經顯示
if(imgs[i]
imgs[i]
}
}
}
};
var load = new Image();
load
load
onscroll();
};
}
delayload({id:[
</script>
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20432.html