使用ajax()制作瀑布流

设计一个固定四列的瀑布流,每张图片的位置放在最短的li中。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<style>
body {margin: 0;}
#ul1 {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>
<script>
window.onload = function() {
	
	var oUl = document.getElementById('ul1');
	var aLi = oUl.getElementsByTagName('li');
	var iLen = aLi.length;
	var iPage = 1;
	var b = true;
	
	//初始化数据处理
	getList();
	
	function getList() {
		ajax('get','getPics.php','cpage=' + iPage,function(data) {
		
			var data = JSON.parse(data);
			
			if ( !data.length ) {
				//后续没有数据了
				return ;
			}
			
			for ( var i=0; i<data.length; i++ ) {
				
				//获取高度最短的li
				var _index = getShort();
				
				var oDiv = document.createElement('div');
				var oImg = document.createElement('img');
				oImg.src = data[i].preview;
				oImg.style.width = '225px';
				//高度按比例缩小
				oImg.style.height =  data[i].height * ( 225 / data[i].width ) + 'px';
				oDiv.appendChild( oImg );
				var oP = document.createElement('p');
				oP.innerHTML = data[i].title;
				oDiv.appendChild( oP );
				
				aLi[_index].appendChild( oDiv );
				
			}
			
			b = true;
			
		});
	}
	
	window.onscroll = function() {
		
		var _index = getShort();
		var oLi = aLi[_index];
		
		var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
		
		if ( getTop( oLi ) + oLi.offsetHeight < document.documentElement.clientHeight + scrollTop ) {
			
			if ( b ) {
				b = false;
				iPage++;
				getList();
			}
			
		}
		
	}
	//获取高度最小的li的下标
	function getShort() {
		var index = 0;
		var ih = aLi[index].offsetHeight;
		for (var i=1; i<iLen; i++) {
			if ( aLi[i].offsetHeight < ih ) {
				index = i;
				ih = aLi[i].offsetHeight;
			}
		}
		return index;
	}
	//获取li到浏览器顶端的距离;offsetTop:当前对象到其上级层顶部的距离。
	function getTop(obj) {
		var iTop = 0;
		while(obj) {
			iTop += obj.offsetTop;
			obj = obj.offsetParent;
		}
		return iTop;
	}
	
}
</script>
</head>

<body>
	<ul id="ul1">
    	<li></li>
      	<li></li>
        <li></li>
        <li></li>
    </ul>
</body>
</html>
ajax文档:

function ajax(method, url, data, success) {
	var xhr = null;
	try {
		xhr = new XMLHttpRequest();
	} catch (e) {
		xhr = new ActiveXObject('Microsoft.XMLHTTP');
	}
	
	if (method == 'get' && data) {
		url += '?' + data;
	}
	
	xhr.open(method,url,true);
	if (method == 'get') {
		xhr.send();
	} else {
		xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
		xhr.send(data);
	}
	
	xhr.onreadystatechange = function() {
		
		if ( xhr.readyState == 4 ) {
			if ( xhr.status == 200 ) {
				success && success(xhr.responseText);
			} else {
				alert('出错了,Err:' + xhr.status);
			}
		}
		
	}
}


php文档:

<?php
header('Content-type:text/html; charset="utf-8"');

/*
API:
	getPics.php

		参数
		cpage : 获取数据的页数
*/
$cpage = isset($_GET['cpage']) ? $_GET['cpage'] : 1;

$url = 'http://www.wookmark.com/api/json/popular?page=' . $cpage;

$content = file_get_contents($url);
$content = iconv('gbk', 'utf-8', $content);

echo $content;

?>




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值