瀑布流的网站的实现的过程

widuu 2012-12-22 PHP技术 3,980 0 喜欢 (0)

随着瀑布流的出现,现在这种技术风靡到各大电商网站,感觉是可能用户的体验度的比较高不???

今天我就给大家代码,今天有点事太麻烦,所以等过两天我再给大家讲一下原理
[php]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Show</title>
<style>
#water {
/*width:960px;*/
/*margin:0 auto;*/
}
#water li{
list-style:none;
float:left;
}
#water li div{
padding:10px;
}
</style>
<script>
var pic_width=220; //每张图片的宽度
var pic_num=10; //每次显示10张图片
var from=0; //数据库中从第几张开始显示,第一张开始是0
/* 页面加载完初始化,获取图片 */
window.onload=function(){
init(); //初始化动态生成列数
loadPic(); //获取图片
}
/* 当浏览器宽度发生变化时,重新初始化 */
window.onresize=function(){
init();
loadPic();
}
/* 当滚动条移动到距底部还有200距离的时候加载新的图片 */
window.onscroll=function(){
var sHeight=document.documentElement.scrollTop||document.body.scrollTop;//滚动的高度
var wHeight=document.documentElement.clientHeight; //窗口高度
var dHeight=document.documentElement.offsetHeight;//文档高度
if(dHeight-wHeight-sHeight<200){
from=from+pic_num; //从数据库中获取后面的图片信息,要更改from值,该值会通过ajax传入到服务器端
loadPic();
}
}
/* 初始化,动态计算页面宽度,算出列数 */
function init(){
var oul=document.createElement('ul'); //生成ul对象
var width=document.body.offsetWidth; //获取浏览器宽度
var bro_colum=Math.floor(width/(pic_width+20)); //计算列数
oul.setAttribute('id','water'); //给予id为water
for(var i=0;i<bro_colum;i++){ //循环创建li对象
var oli=document.createElement('li');
oul.appendChild(oli);
}
document.body.appendChild(oul);
}
/* 获取图片 */
function loadPic(){
var ajax=getAjax(); //获取ajax对象
ajax.open('GET','data.php?from='+from+'&num='+pic_num,true);
ajax.send();
ajax.onreadystatechange=function(){
if(ajax.readyState==4 && ajax.status==200){
process(ajax.responseText); //获取服务器端传回的json字符串,调用一个方法进行处理
}
}
}
/* 处理json字符串,将图片插入到页面中 */
function process(jsonText){
var obj=eval('('+jsonText+')'); //生成对象列表
var oul=document.getElementById('water'); //获取id为water的ul对象
for(var i=0;i<obj.length;i++){ //利用遍历对每张图片进行处理
var oProduct=obj[i]; //获取图片对象
/* 利用算法遍历ul下面的所有li高度,找到高度最短的一个li,向里面插入图片 */
iHeight=-1;
for(var j=0;j<oul.childNodes.length;j++){
iTempHeight=oul.childNodes[j].offsetHeight;
if(iHeight==-1 || iHeight>iTempHeight){
iHeight=iTempHeight;
var oli=oul.childNodes[j];
}
}
odiv=document.createElement('div');
odiv.innerHTML='<img src="./uploads/'+oProduct.image+'"/><br/>'+oProduct.title;
oli.appendChild(odiv);
}

}
function getAjax(){
var xmlhttp;
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlhttp;
}

</script>
</head>
<body>
</body>
</html>

[/php]

[php]
<?php
/*
* 数据库中的数据为
* id image title
* 1 1.jpg something
* 2 2.jpg something
* ...
* 总共有20个图片 1.jpg - 20.jpg 对应uploads文件夹中的图片名
*
*/

$arr=array();
mysql_connect('localhost','root','root');
mysql_select_db('water');
$sql="select image,title from pic limit {$_GET['from']},{$_GET['num']}";
$result=mysql_query($sql);
if($result && mysql_num_rows($result)>0){
while($data=mysql_fetch_assoc($result)){
$arr[]=$data;
}
}
$str=json_encode($arr);
echo $str;
?>

[/php]

嗯 这些就两个一个,就是下边这个我们从数据库中取出数据,然后用json 的方式,传给前台,整个流程是ajax的异步传输

嗯 今天就先说道这里,嗯时间不是那么充足,谢谢大家的支持,欢迎转载,转载请注明来自微度网络-网络技术中心http://www.widuu.com

转载请注明来自微度网络,本文标题:《瀑布流的网站的实现的过程》

喜欢 0 发布评论
Top