标签:dht res city loading ati 加载 stat setw 取出
有个小问题窗口改变的时候会被重新刷新loadingimg函数,请自行修改,
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
.imglist{width: 100%;height: auto;position: relative;}
.imglist ul{padding:0px;margin:0px auto;position: relative;}
.imglist ul li{width: 220px;border:1px solid #ccc;padding: 5px;float: left;list-style: none;position: absolute;}
.imglist ul li img{width: 100%;vertical-align: middle;}
.more{position: absolute;display: block;width: 100px;height:30px;padding: 5px 10px;background-color: #efefef;color:#333;left: 0px;right:0px;margin: 0px auto;border:none;border-radius: 4px;}
</style>
</head>
<body>
<div class="imglist">
<ul id="list">
</ul>
<button class="more" type="button" style="cursor: pointer;">更多</button>
</div>
<script>
var loadingfun = function(){
this.loadingimg = function(){
loadingimg();
}
this.changesize = function(){
changesize();
}
function changesize(){
/**重新计算页面宽度并获取列数**/
var documentwidthagain = document.documentElement.offsetWidth,//页面宽度
ullistagain = document.getElementById(‘list‘),
litagarrayagain = ullistagain.getElementsByTagName(‘li‘),//获取li集合
lilengthagain = litagarrayagain.length,//获取li的个数
liwidthagain = litagarrayagain[0].offsetWidth,//获取li宽度
litagheighagain= [],
rowagain = Math.floor(documentwidthagain/liwidthagain),//获取列数
rowheightagain = [];
ullistagain.style.width = rowagain*liwidthagain+‘px‘;//重新定义ul的宽度
for(var i=0;i<rowagain;i++){
litagarrayagain[i].style.top = 0+"px";
litagarrayagain[i].style.left = liwidthagain*i+"px";
litagheighagain.push(litagarrayagain[i].offsetHeight);
rowheightagain.push(litagheighagain[i]);
}
for(var i=rowagain;i<lilengthagain;i++){
litagheighagain.push(litagarrayagain[i].offsetHeight);
var loadingimgsli = new loadingimg();
var minindex = loadingimgsli.minheight(rowheightagain);
litagarrayagain[i].style.top = rowheightagain[minindex]+"px";
litagarrayagain[i].style.left = liwidthagain*minindex+"px";
rowheightagain[minindex] +=litagheighagain[i];
}
/**列数定义完成**/
}
function loadingimg(){
var numimg = 10,
fristnum = 10;//初始加载数据条数
(function ajaximg(){
var litagarray =null,
lilength =null,
liwidth=null,
litagheigh =[],//各个li模块的高度
rowheight =[],//各个列的高度
row=null,
objectresult ="",
ullist = null,
more = document.getElementsByClassName(‘more‘)[0];
if(window.XMLHttpRequest){
xmlhttp =new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject(‘Micrsot.XMLHTTP‘);
}
(function readyajax(){
xmlhttp.onreadystatechange = function(){
if(xmlhttp.status==200&&xmlhttp.readyState==4){
var resultdata = eval(‘(‘+xmlhttp.responseText+‘)‘),
_htmlallli = ‘‘,
indexnum=0;
ullist = document.getElementById(‘list‘);
objectresult = resultdata.imgdata;
datalength = objectresult.length;
/*****获取li*****/
(function imgload(){
var imagesload = new Image();//实例化图片缓存函数
imagesload.onload = function(){
//如果缓存完图片则获取li并插入
if(indexnum==fristnum){
for(var i=0;i<fristnum;i++){
var _htmlli = "<li><a href=‘‘><img src="+objectresult[i].urlimg+" /></a></li>";
_htmlallli +=_htmlli;
}
/***插入li****/
addhtml(_htmlallli,ullist);
/**定义列数**/
litagarray = ullist.getElementsByTagName(‘li‘);//获取li集合
lilength = litagarray.length;//获取li的个数
liwidth = litagarray[0].offsetWidth;//获取li宽度
documentwidth = document.documentElement.offsetWidth;//页面宽度;
row = Math.floor(documentwidth/liwidth);
ullist.style.width = row*liwidth+‘px‘;
/**列数定义完成**/
//获取各个模块的高度
for(var i=0;i<lilength;i++){
litagheigh.push(litagarray[i].offsetHeight);
}
/**初始化第一列的各模块的top与left并获取列的高度**/
for(var i=0;i<row;i++){
litagarray[i].style.top = 0+‘px‘;
litagarray[i].style.left = liwidth*i+‘px‘;
rowheight.push(litagarray[i].offsetHeight);
}
/**插入新的模块,从最短一列开始插入,并更新该列的高度**/
for(var i=row;i<fristnum;i++){
var minindex = minheight(rowheight);//获取最短列的索引
litagarray[i].style.top = rowheight[minindex] +‘px‘;//设置模块的top
litagarray[i].style.left = liwidth*minindex+‘px‘;//设置模块的left
rowheight[minindex] = litagheigh[i]+rowheight[minindex];//更新最短列的高度
}
var thistop = maxheight(rowheight);
more.style.top = thistop +‘px‘;
}else{
imgload()//没有缓存完则继续缓存
}
}
imagesload.src = objectresult[indexnum].urlimg;//缓存图片
indexnum++;
})()
}
}
xmlhttp.open(‘POST‘,‘imgdata.php‘);
xmlhttp.setRequestHeader("Content-type","application/json;charset=utf-8");
xmlhttp.send(null);
})()
//点击更多事件
more.onclick = function(){
var indexnumtwo = fristnum;
(function imageloading(){
var imagesloadtwo = new Image();//实例化图片缓存函数
imagesloadtwo.onload = function(){
if(indexnumtwo==numimg+fristnum){
var _htmlalli = ‘‘;
//判断是否全部已经加载(显示的数据=剩余的数据刚好相等,显示的数据>与剩余的数据,所以遍历的时候要判断i是否超出剩余条数)
if(datalength>fristnum){
for(var i=fristnum;i<numimg+fristnum;i++){
//如果全部显示完则停止遍历跳出循环;
if(i>=datalength){
break;
}
var _htmlli = "<li><a href=‘‘><img src="+objectresult[i].urlimg+" /></a></li>";
_htmlalli +=_htmlli;
}
fristnum = numimg+fristnum;
var testul = ullist;
addhtml(_htmlalli,ullist);
var newlitaglength = litagarray.length;
for(var i=lilength;i<newlitaglength;i++){
litagheigh.push(litagarray[i].offsetHeight);//新加载数据个模块的高度;
}
//插入加载的数据并更新更列的高度与前面的插入一样;
for(var i=lilength;i<newlitaglength;i++){
var minkey = minheight(rowheight);
litagarray[i].style.top = rowheight[minkey]+‘px‘;
litagarray[i].style.left = minkey*liwidth +‘px‘;
rowheight[minkey] +=litagheigh[i];
}
lilength = newlitaglength;
var thistop = maxheight(rowheight);
more.style.top = thistop +‘px‘;
}else{
alerts(‘没有更多了‘);//如果点击时已经加载完,则弹出
}
}else{
imageloading();
}
}
if(!objectresult[indexnumtwo]){
imagesloadtwo.src="img/11.jpg";
}else{
imagesloadtwo.src = objectresult[indexnumtwo].urlimg;//缓存图片
}
indexnumtwo++;
})();
}
})();
this.minheight = function(arraymode){
return minheight(arraymode);
}
//获取最短列的索引
function minheight(arraymode){
var minval = arraymode[0];
var minkey = 0;
for(var keys in arraymode){
if(minval>arraymode[keys]){
minval = arraymode[keys];
minkey = keys;
}
}
return minkey;
}
//获取最高列的的值
function maxheight(arraymode){
var maxval = 0;
for(var keys in arraymode){
if(arraymode[keys]>maxval){
maxval = arraymode[keys];
}
}
return maxval;
}
//插入html
function addhtml(elementhtml,elementenode){
var newdiv = document.createElement(‘div‘);
newdiv.innerHTML = elementhtml;
takehtml = document.createDocumentFragment();//创建一个虚拟的碎片html片段
while(newdiv.firstChild){
takehtml.appendChild(newdiv.firstChild);//取出div中子元素节点,这里有个有意思的地方就是takehtml每插入一个firstchild,div中便少一个;所以takeli中插入的永远是div的第一个
}
return elementenode.appendChild(takehtml);
}
//弹出提示信息
function alerts(texts){
var alerttext = "<p id=‘alerttext‘ style=‘text-align:center;line-height:80px;position:fixed;left:0px;right:0px;margin:40% auto;z-index:1000;width:200px;height:80px;border-radius:8px;background-color:#000;color:#fff;opacity:0.8;‘>"+texts+"</p>"
var divalter = document.createElement(‘div‘);
divalter.innerHTML = alerttext;
var alterremove = document.getElementById(‘alerttext‘);
var takediv = document.createDocumentFragment();
takediv.appendChild(divalter.firstChild);
if(!alterremove){//判断是否弹出了信息,没有则显示;
document.body.appendChild(takediv);
alterremove = document.getElementById(‘alerttext‘);
setTimeout(function(){
document.body.removeChild(alterremove);
},2000)
}
}
}
}
window.onload =function(){
loads = new loadingfun();
loads.loadingimg();
}
window.onresize = function(){
loads = new loadingfun()
loads.changesize();
}
</script>
</body>
</html>
标签:dht res city loading ati 加载 stat setw 取出
原文地址:http://www.cnblogs.com/liangxiblog/p/6249655.html