瀑布流 &留言板
实例:瀑布流 留言板
(一)瀑布流
瀑布流实现原理分析
1.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);
}
}
}
}
2.HTML文件内容
<!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>无标题文档</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(); //进行第一页的加载
//获取初始化数据,首先,通过ajax加载数据过来
function getList(){
ajax('get','getPics.php','cpage='+iPage,function(data){
var data = JSON.parse(data);
//做一下处理,数据不可能无限加载下去,如果数据没了,不能再加载了
if( !data.length){
//后续没有数据了
return; //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;
oDiv.appendChild(oImg); //把当前图片添加到当前div里
oImg.style.width = '225px';
oImg.style.height = data[i].height *(225/data[i].width) + 'px';
var oP = document.createElement('p');
oP.innerHTML = data[i].title;
oDiv.appendChild(oP);
//把整个div添加到最短li里
aLi[_index].appendChild(oDiv);
}
b = true; //把门打开
});
}
//当滚动条发生滚动时,判断最短的li是否进入可视区
window.onscroll = function(){
var _index = getShort();
var oLi = aLi[_index]; //获取最短的li
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
//如果当前的li的top值+自身的高<可视区的高+滚动条滚动距离
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;//当前li的高度
for(var i=1; i<iLen; i++){ //for循环 把当前的每一个li取出来
if(aLi[i].offsetHeight < ih){
index = i;
ih = aLi[i].offsetHeight; //ih等于当前高
}
}
return index;
}
//封装一个函数,获取一个元素到页面的绝对值
function getTop(obj){
var iTop = 0; //初始化为0
while(obj){ //当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]第二课:实例:留言板、瀑布流
知识点总结 瀑布流原理(固定布局) 总宽度大小固定 每列宽度固定,比如LI,高度自动计算,每列使用float:left来布局 计算最短的一列,将Div插到最短的一列处(li里面包div)(getSho ...
- RecylerView完美实现瀑布流效果
RecylerView包含三种布局管理器,分别是LinearLayoutManager,GridLayoutManager,StaggeredGridLayoutManager,对应实现单行列表,多行 ...
- Android瀑布流照片墙实现,体验不规则排列的美感
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/10470797 传统界面的布局方式总是行列分明.坐落有序的,这种布局已是司空见惯,在 ...
- android瀑布流效果(仿蘑菇街)
Android 转载分享(10) 我们还是来看一款示例:(蘑菇街) 看起来很像我们的gridview吧,不过又不像,因为item大小不固定的,看起来是不是别有一番风味,确实如此. ...
- 8款实用的Jquery瀑布流插件
1.网友Null分享Jquery响应式瀑布流布局插件 首先非常感谢网友Null的无私分享,此作品是一款响应式瀑布流布局Jquery插件,网友Null增加了一个屏幕自适应和响应式,响应式就是支持智能手机 ...
- RecyclerView实现瀑布流效果(图文详解+源码奉送)
最近有时间研究了一下RecyclerView,果然功能强大啊,能实现的效果还是比较多的,那么今天给大家介绍一个用RecyclerView实现的瀑布流效果. 先来一张效果图: 看看怎么实现吧: 整体工程 ...
- 利用JS实现简单的瀑布流效果
哈哈, 我又来啦, 在这一段时间里, 我简单的学习了一下javascript(JS), 虽然不是很懂啦, 但是我也简单的尝试着做了点小东西, 就比如现在流行的瀑布流效果, 经过我的努力终于成功的完成了 ...
- android 瀑布流效果(仿蘑菇街)
我们还是来看一款示例:(蘑菇街) 看起来很像我们的gridview吧,不过又不像,因为item大小不固定的,看起来是不是别有一番风味,确实如此.就如我们的方角图形,斯通见惯后也就出 ...
- iOS开发-UICollectionView实现瀑布流
关于瀑布流的实现网上有很多种解法,自定义控件,TableView+ScrollView,UICollectionView是iOS6发布之后用于展示集合视图,算起来已经发布三年左右了,不过知识点是不变的 ...
随机推荐
- Counterfeit Dollar -----判断12枚钱币中的一个假币
Counterfeit Dollar Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u ...
- [LeetCode] Ugly Number II
Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...
- Oracle优化的几个简单步骤
数据库优化的讨论可以说是一个永恒的主题.资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据库配置等等.还有的人认为要抓出执行最慢的语句来进行优化.但实际情况 ...
- hdu 4031 2011成都赛区网络赛A题 线段树 ***
就是不知道时间该怎么处理,想了好久,看了别人的题解发现原来是暴力,暴力也很巧妙啊,想不出来的那种 -_-! #include<cstdio> #include<iostream&g ...
- 10gRAC运行srvctl报错error while loading shared libraries:
数据库10g才会有这个错,因为11g的grid和oracle是分开的. [oracle@news01 orcl]$ srvctl /u01/app/oracle/db_1/jdk/jre/bin/ja ...
- maven项目Tomcat controller 404
今天使用tomcat7.0.54启动现有的maven项目,可以正常启动,但是自己所写的所有的@controller注解的请求都报出了404的错误,在网上查了好久也很少找到这个问题,各种方法都尝试了也没 ...
- ASCIIHexDecode,RunLengthDecode
public static byte[] ASCIIHexDecode(byte[] data) { MemoryStream outResult = new MemoryStream(); bool ...
- 《大话》之 装饰模式 Vs 建造者模式
一.简介: 装饰模式: 背景:小菜要见美女娇娇,感慨自己不会着装,怕给娇娇留下坏印象 内容:动态的给一个对象添加一些额外职责 图文并茂: ...
- 异步框架asyn4j的原理
启动时调用init方法 public void init(){ if (!run){ run = true; //工作队列 workQueue = newPriorityBlockingQueue(m ...
- UVA 12232 Exclusive-OR(并查集+思想)
题意:给你n个数,接着三种操作: I p v :告诉你 Xp = v I p q v :告诉你 Xp ^ Xq = v Q k p1 p2 … pk:问你k个数连续异或的结果 注意前两类操作可能会出现 ...