Ajax异步实现瀑布流

<!--设置css样式--> 
<style>
body{margin:0;}
#ul{width:1080px;margin:100px auto 0;}
li{width:247px;list-style:none;float:left;margin-right:10px;}
li div{border:1px solid #000;padding:10px;margin-bottom:10px;}
li div img{width:225px;display:block;}
</style>

<!--引用了一个封装好的方法-->
<script src="ajax.js"></script>
<!--定义js中需要的数据-->
<script>
window.onload=function(data){
    //定义变量名称
	var ul=document.getElementById("ul1");
	var li=document.getElementById("li");
	var len=li.length;
	var page=1;
	var b=true;
	
	//调用方法;
	getList();
	//方法,url地址,返回的页数,回掉函数
	ajax('get','getpic.php','cpage='+page,function(data){
	    //利用反序列化,将服务器数据中的字符串转为对象
		var data=JSON.parse(data);
		if(!data.length){
			return;
			}
			//循环数据,显示li
		for(var i=0;i<data.length;i++){
			var div=document.createElement("div");
			var img=document.createElement("img");
			//获取图片的地址,用一个preview属性
			 img.src=data[i].preview;
			 //设置图片格式
			 img.style.width='225px';
			 img.style.height=data[i].height*(225/data[i].width)+'px';
			 img.style.height=data[i].height+'px';
			 //在div后添加新的结点
			 div.appendChild("img");
			 //创建p标签,并定义,获取p标签的内容
			var p=document.createElement("p");
			 p.innerHTML=data[i].title;
			 div.appendChild(p);
			 li[_index].appendChild(div);
			}
			
			b=true;
		});
		//该方法用于通过li高度来判定下张显示的图片插入的位置
		function getShort(){
			var index=0;
			//li下元素高度
			var ih=li[index].offsetHeight;
			for(var i=1;i<len;i++){
				if(li[i].offsetHeight<ih){
					index=i;
					ih=li[i].offsetHeight;
					}
				}
				return index;
			}
			//该方法用来实现鼠标滚动时加载数据
		window.onscroll=function(){
			var _index=getShort();
			var li=li[_index];
			var scrollTop=document.documentElement.scrollTop || document.body.scrollTop;
			if(getTop(li)+li.offsetHeight<document.documentElement.clientHeight+scrollTop){
			//通过b的真假值,判断是否要加载数据
				if(b){
			    b=false;
				page++;
				getList();
					}
				}
			}
	}
</script>

<body>
<ul id="ul1">
   <li></li>
   <li></li>
   <li></li>
</ul>
</body>

在这里插入图片描述
要点:

  • 动态生成页面结构:其中,用来生成页面结构的所有数据都是有php文件形式的,因此需要用到ajax来获取数据,然后再对数据进行处理,生成页面结构,因为有的div内容不一样,高度不相同,为了防止有的li越来越长,而有的却较短,因此页面中的每一个新的div都会接在最短的li中,这样整个页面就会较为均衡的向下添加内容;

  • 实现滚动加载效果:在前面的的基础上通过ajax实现动态加载。

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值