javascript图片按需加载(滚动加载)的实现
2011-09-21 10:50
447 查看
function ImagesDelay(container) {
//离屏幕下方50像素内的图片加载
var minBottom = 50;
var srcData = new Array();
var waitingUrl = "";
var lastBottomX = 0;
//will server do
//Replace src
var imgs = $(container).find("img");
var id = 0;
imgs.each(function () {
id++;
var rect = this.getBoundingClientRect();
$(this).attr("ld", "l" + id);
srcData[srcData.length] = { "ld": "l" + id, "src": $(this).attr("src"), "rect": rect };
$(this).attr("src", waitingUrl);
});
$(window).scroll(function () {
LoadImages();
});
// do first loading
LoadImages();
function CalcRact() {
for (var i = 0; i < srcData.length; i++) {
var imgs = $(container).find("img[ld=" + srcData[i].ld + "]");
if (imgs.length > 0) {
srcData[i].rect = imgs[0].getBoundingClientRect();
}
}
}
function LoadImage(img, src) {
var appname = navigator.appName.toLowerCase();
if (appname.indexOf("netscape") == -1) {
//ie
img.onreadystatechange = function () {
if (img.readyState == "complete") {
CalcRact();
}
};
} else {
//firefox
img.onload = function () {
if (img.complete == true) {
CalcRact();
}
}
}
img.src = src;
if (img.width > 0 && img.complete) {
CalcRact();
}
}
function LoadImages() {
var bottomX = $(window).height() + $(window).scrollTop();
if (lastBottomX != bottomX) {
lastBottomX = bottomX;
var needData = GetNeedLoadImgs(bottomX);
for (var i = 0; i < needData.length; i++) {
var imgs = $(container).find("img[ld=" + needData[i].ld + "]");
if (imgs.length > 0) {
LoadImage(imgs[0], needData[i].src);
}
}
}
}
function GetNeedLoadImgs(bottomX) {
var x = bottomX + minBottom;
var result = new Array();
var needLoad = new Array();
for (var i = 0; i < srcData.length; i++) {
var rect = srcData[i].rect;
if (x >= rect.top) {
result[result.length] = srcData[i];
} else {
needLoad[needLoad.length] = srcData[i];
}
}
srcData = needLoad;
return result;
}
}
<div id="gb_container">
</div>
<script type="text/javascript">
var s = new ImagesDelay("#gb_container");
</script>
//离屏幕下方50像素内的图片加载
var minBottom = 50;
var srcData = new Array();
var waitingUrl = "";
var lastBottomX = 0;
//will server do
//Replace src
var imgs = $(container).find("img");
var id = 0;
imgs.each(function () {
id++;
var rect = this.getBoundingClientRect();
$(this).attr("ld", "l" + id);
srcData[srcData.length] = { "ld": "l" + id, "src": $(this).attr("src"), "rect": rect };
$(this).attr("src", waitingUrl);
});
$(window).scroll(function () {
LoadImages();
});
// do first loading
LoadImages();
function CalcRact() {
for (var i = 0; i < srcData.length; i++) {
var imgs = $(container).find("img[ld=" + srcData[i].ld + "]");
if (imgs.length > 0) {
srcData[i].rect = imgs[0].getBoundingClientRect();
}
}
}
function LoadImage(img, src) {
var appname = navigator.appName.toLowerCase();
if (appname.indexOf("netscape") == -1) {
//ie
img.onreadystatechange = function () {
if (img.readyState == "complete") {
CalcRact();
}
};
} else {
//firefox
img.onload = function () {
if (img.complete == true) {
CalcRact();
}
}
}
img.src = src;
if (img.width > 0 && img.complete) {
CalcRact();
}
}
function LoadImages() {
var bottomX = $(window).height() + $(window).scrollTop();
if (lastBottomX != bottomX) {
lastBottomX = bottomX;
var needData = GetNeedLoadImgs(bottomX);
for (var i = 0; i < needData.length; i++) {
var imgs = $(container).find("img[ld=" + needData[i].ld + "]");
if (imgs.length > 0) {
LoadImage(imgs[0], needData[i].src);
}
}
}
}
function GetNeedLoadImgs(bottomX) {
var x = bottomX + minBottom;
var result = new Array();
var needLoad = new Array();
for (var i = 0; i < srcData.length; i++) {
var rect = srcData[i].rect;
if (x >= rect.top) {
result[result.length] = srcData[i];
} else {
needLoad[needLoad.length] = srcData[i];
}
}
srcData = needLoad;
return result;
}
}
<div id="gb_container">
</div>
<script type="text/javascript">
var s = new ImagesDelay("#gb_container");
</script>
相关文章推荐
- 原生javascript实现图片滚动、延时加载功能
- JavaScript实现 页面滚动图片加载
- JavaScript实现页面滚动图片加载(仿lazyload效果)
- JavaScript实现 页面滚动图片加载
- [转]JavaScript实现 页面滚动图片加载
- 解析javascript瀑布流原理实现图片滚动加载
- 解析javascript瀑布流原理实现图片滚动加载
- JavaScript实现 页面滚动图片加载
- JavaScript实现 页面滚动图片加载
- 原生javascript实现图片滚动、延时加载功能
- javascript图片与加载处理基础详细讲解几种方法实现
- 【转】Android循环滚动广告条的完美实现,封装方便,平滑过渡,从网络加载图片,点击广告进入对应网址
- javascript 图片 滚动加载
- 由于自己的需要搜集的一些关于 “ javascript实现图片的不间断连续滚动” 的代码
- 滚动加载图片(懒加载)实现原理
- JavaScript开发——加载在线图片完整功能实现方法(正在加载-加载成功-加载失败)
- JavaScript (定时器控件实现图片的 滚动 以及JavaScript实现跳转和关闭窗口)