仿淘宝/蘑菇街方式,瀑布流效果 - 固定列数
仿淘宝/蘑菇街形式,瀑布流效果 -- 固定列数
<!DOCTYPE html PUBLIC "-//W3C//DTD
HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title> 瀑布流实例</title >
<link type="text/css" rel="stylesheet" href="./7.css" />
<script type="text/javascript" src="http://www.haodou.com/public/js/jquery-1.5.1.min.js" ></script>
<script type="text/javascript" src="./7.js"></ script>
</head>
<body>
<div id= "waterfall_container1" class="left">
<div class="img_container1" ></div>
<div class="img_container1" ></div>
<div class="img_container1" ></div>
<div style="clear :both;"></div >
</div>
<div id= "waterfall_container2" class="right">
<div class="img_container" ></div>
<div class="img_container" ></div>
<div class="img_container" ></div>
<div style="clear :both;"></div >
</div>
<div style="clear :both;"></div >
<script type="text/javascript" >
var tpl
= '<div>'+
'<div><img
src="{img}" width="195" /></div>'+
'<div>{about}</div>'+
'<div>{title}</div>'+
'<div>{start}</div>'+
'</div>';
/**
* waterfall: 瀑布流效果的入口函数
* $("#waterfall_container1"): 外层容器的对象 (必填)
* url: ajax请求的url地址,可以带参数 (必填)
* tpl: 前端HTML模板,其中{img},{about},{title},{start} 必须与 ajax返回的数组下标一致
* img,about,title,start命名可以随意 (必填)
* selector: 外层容器(waterfall_container1)中的每列容器(img_container1)的class名称,
* 格式:‘.img_container1’,注意别忘记‘.’,默认值:‘.img_container’ (非必填)
* max_page: ajax请求最大的页数,默认为:5 ,超过该值不再发送ajax请求(非必填)
*
* waterfall_1 : 返回函数(setActive), 参数val:设置是否开启根据窗口下拉比例多次获取函数,false:不开启,true:开启,默认:true
* 作用:用于多标签切换,只有当前选中tal标签才能继续通过ajax获取数据,其它一律不能获取数据,tal标签切换时手动触发该函数
*/
var waterfall_1
= waterfall($("#waterfall_container1"), {url:'./7.php?a=1&b=2' ,
tpl:tpl, selector:'.img_container1', max_page:10});
//waterfall_1.setActive(false);
var waterfall_2
= waterfall($("#waterfall_container2"), {url:'./7__.php',
tpl:tpl});
//waterfall_2.setActive(false);
</script>
</body>
</html>
/**
* 瀑布流效果JS
*
* @author lixiaogang <858864436@qq.com>
*/
;(function(){
//保存每个选项卡所对应的数据[instance的json结构]
var instances
= [], $win = $(window), scroll_top = 0;
/**
* 瀑布流效果入口函数
* @param object el 瀑布流外层的容器的节点对象
* @param json options
json对象:
* url:ajax请求路径(必填),
* tpl:html模板(必填),
* selector:ajax数据填充节点的class名称,默认为:.img_container
* max_page:ajax获取最大的页数,默认为:5
*
* @return object setActive:设置是否开启根据窗口下拉比例多次获取函数,false:不开启,true:开启
*/
waterfall = function(el,
options) {
if(!options.url
|| !options.tpl) return;
var instance
= {element: el, active: true,
loading: true, page:
0, max_page:5};
if(options.max_page)
instance = $.extend(instance, {max_page:options.max_page});
instance.options = $.extend({selector: '.img_container'},
options);
instance.children = $(el).find(instance.options.selector);
instance.cols = instance.children.length;
var index
= instances.length;
instances[index] = instance;
load(instance);
return {
setActive: function(val)
{
instances[index].active = !!val;
}
};
};
//ajax 动态获取数据
function load(instance)
{
instance.page++;
if(instance.page
> parseInt(instance.max_page)) return;
$.getJSON(instance.options.url, {page:instance.page}, function(data)
{
var data_len
= data.length, temp = []; //临时保存html
for(var i=0;
i<data_len; i++){
var item
= data.shift(), index = i % instance.cols;
if('undefined' == typeof temp[index])
temp[index] = '';
temp[index] += instance.options.tpl.replace(/\{\w+\}/g , function(m)
{return item[m.substring(1,m.length-1)];});
}
if(0
< temp.length){
for(var i=0;
i<instance.cols; i++){
instance.children.eq(i).append(temp[i]);
}
}
instance.loading = false;
});
};
/**
* 窗口绑定事件
* 1. 若 active=false 则 不触发ajax的数据获取
* 2. 若 loading=true 则 表示正在进行ajax数据获取,不进行多次数据获取
*/
$win.scroll( function()
{
var temp_scroll_top
= $win.scrollTop();
if (temp_scroll_top
> scroll_top && ($win.height() + $win.scrollTop()) >= $("body" ).height()-100)
{
scroll_top = temp_scroll_top;
$.each(instances, function(i,
instance){
if (!instance.active
|| instance.loading) return;
instance.loading = true;
load(instance);
});
}
});
})();
- 1楼a27250368038分钟前
- 我自己先顶一个。