您的位置:首页 > Web前端

前端【1】-图片滚动加载

2016-06-07 13:08 309 查看
前面为了赶时间,拷贝了一段滚动加载的效果(http://www.cnblogs.com/Darren_code/archive/2011/07/21/LoadImage.html),结果列表一长,导致页面其他脚本执行非常缓慢,造成很大的性能问题,最后忍无可忍,决定自己重新编码。思路是给列表上每20行编为一个区间,监听页面滚动事件,一旦下一个区间即将可见,加载下一个区间的图片,这样如果不是滚动很快的话,基本上看不到过渡图片的,运行下来,结果让人满意,除了往上滚动等问题没有考虑之外,基本上没有问题了。

var positions = [];//标记位置
var flags = [];//标记是否已经加载
function initialPositions() {
for (var i = 20, len = @(Model.Data.Count); i <= len; i+=20) {
var item = document.getElementById("item" + i);
positions.push(item.getBoundingClientRect().top);
flags.push(false);
}

//判断是否有余数
if(@(Model.Data.Count) % 20 >= 1){
flags.push(false);//增加一个区间
}
}
initialPositions();

window.addEventListener("scroll",function(){
var pos = document.body.scrollTop;

//判断当前区间
for (var i = 0, len=positions.length; i < len; i++) {
if(positions[i] >= pos){
break;
}
}

loadSection(i);
loadSection(i+1);
});

function loadSection(current){
//判断当前区间是否已经加载
if(flags[current] == false){
for (var i = 1; i <= 20; i++) {
var head = document.getElementById("head" + (20*current+i));
if(head){
var attrSrc = head.getAttribute("xsrc");
head.setAttribute("src", attrSrc);
}
}

flags[current] = true;
}
}
loadSection(0);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: