程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> jQuery向下滾動即時加載內容實現的瀑布流效果

jQuery向下滾動即時加載內容實現的瀑布流效果

編輯:PHP綜合

下拉滾動條或鼠標滾輪滾動到頁面底部時, 動態即時加載新內容。

後台用 json 傳輸數據, 示例程序中只寫了示例數組。數據也只設置了兩個屬性, 需根據實際應用改寫。

頁面用了 ul li 做為容器, 每個 li 表示一列

<ul id="stage"> 
 <li></li> 
 <li></li> 
 <li></li> PHP和Jquery和ajax實現下拉淡出瀑布流效果(無需插件) 
 <li></li> 
</ul> 

JS代碼

/* 
@版本日期: 版本日期: 2012年4月11日 
@著作權所有: 1024 intelligence ( http://www.1024i.com ) 
獲得使用本類庫的許可, 您必須保留著作權聲明信息. 
報告漏洞,意見或建議, 請聯系 Lou Barnes([email protected]) 
*/ 
$(document).ready(function(){ 
 loadMore(); 
}); 
$(window).scroll(function(){ 
 // 當滾動到最底部以上100像素時, 加載新內容 
 if ($(document).height() - $(this).scrollTop() - $(this).height()<100) loadMore(); 
}); 
function loadMore() 
{ 
 $.ajax({ 
  url : 'data.php', 
  dataType : 'json', 
  success : function(json) 
  { 
   if(typeof json == 'object') 
   { 
    var oProduct, $row, iHeight, iTempHeight; 
    for(var i=0, l=json.length; i<l; i++) 
    { 
     oProduct = json[i]; 
     // 找出當前高度最小的列, 新內容添加到該列 
     iHeight = -1; 
     $('#stage li').each(function(){ 
      iTempHeight = Number( $(this).height() ); 
      if(iHeight==-1 || iHeight>iTempHeight) 
      { 
       iHeight = iTempHeight; 
       $row = $(this); 
      } 
     }); 
     $item = $('<div><img src="'+oProduct.image+'" border="0" ><br />'+oProduct.title+'</div>').hide(); 
     $row.append($item); 
     $item.fadeIn(); 
    } 
   } 
  } 
 }); 
} 

下面再給大家分享一段代碼:PHP Jquery和ajax相結合實現下拉淡出瀑布流效果

我的風格,廢話不多說,感興趣的朋友直接看下文代碼: 

前台:

<br><?php <br>$category=$this->getMyVal('category',$_GET);<br>$xiaohuaList=Xiaohua::model()->getXiaohao($category); //打開頁面默認顯示的數據<br>?><br><br><div id="waterfall">
<?php foreach ($xiaohuaList as $xiaohua):?>
<?php $q_id=$xiaohua->id;?>
<div class="cell m-bg item-h border_h">
<div class="border-solid-b padding-b-5 text-center"><span class="g-bg glyphicon glyphicon-sunglasses margin-r-5" aria-hidden="true"></span><strong class="color-5 fx_t_<?php echo $q_id;?>"><?php echo CHtml::encode($xiaohua->title);?></strong></div>
<div class="padding-t-5 fx_c_<?php echo $q_id;?>"><?php echo $xiaohua->content;?></div>
<div class="padding-t-5 text-right"><span onclick="fx(<?php echo $q_id;?>);" class="fx cursor_p" data-id="<?php echo $q_id;?>"><span class="g-bg glyphicon glyphicon-share-alt margin-r-5" aria-hidden="true"></span>分享</span></div>
</div>
<?php endforeach;?>
</div>
<script>
var opt={
getResource:function(index,render){//index為已加載次數,render為渲染接口函數,接受一個dom集合或jquery對象作為參數。通過ajax等異步方法得到的數據可以傳入該接口進行渲染,如 render(elem)
var html='';
var _url='<?php echo $this->createUrl('listXiaohua');?>';
$.ajax({
type: "get",
url: _url,
dataType : "json",
async:false,
success: function(data){
for( var i in data){
var q_id=data[i].id;
html+='<div class="cell m-bg item-h border_h"><div class="border-solid-b padding-b-5 text-center"><span class="g-bg glyphicon glyphicon-sunglasses margin-r-5" aria-hidden="true"></span><strong class="color-5 fx_t_'+q_id+'">'+data[i].title+'</strong></div><div class="padding-t-5 fx_c_'+q_id+'">'+data[i].content+'</div>'
+'<div class="padding-t-5 text-right"><span onclick="fx('+q_id+');" class="fx cursor_p" data-id="'+q_id+'"><span class="g-bg glyphicon glyphicon-share-alt margin-r-5" aria-hidden="true"></span>分享</span></div></div>';
}
}});
return $(html);
},
column_width:376,
column_space:10,
auto_imgHeight:true,
insert_type:1
}
$('#waterfall').waterfall(opt);
</script> 

後台:

public function actionListXiaohua() {
$xiaohuaList=Xiaohua::model()->getXiaohua();//獲取笑話信息
echo CJSON::encode($xiaohuaList);
} 

js:

;(function($){
var
//參數
setting={
column_width:240,//列寬
column_className:'waterfall_column',//列的類名
column_space:2,//列間距
cell_selector:'.cell',//要排列的磚塊的選擇器,context為整個外部容器
img_selector:'img',//要加載的圖片的選擇器
auto_imgHeight:true,//是否需要自動計算圖片的高度
fadein:true,//是否漸顯載入
fadein_speed:600,//漸顯速率,單位毫秒
insert_type:1, //單元格插入方式,1為插入最短那列,2為按序輪流插入
getResource:function(index){ } //獲取動態資源函數,必須返回一個磚塊元素集合,傳入參數為加載的次數
},
//
waterfall=$.waterfall={},//對外信息對象
$waterfall=null;//容器
waterfall.load_index=0, //加載次數
$.fn.extend({
waterfall:function(opt){
opt=opt||{};
setting=$.extend(setting,opt);
$waterfall=waterfall.$waterfall=$(this);
waterfall.$columns=creatColumn();
render($(this).find(setting.cell_selector).detach(),false); //重排已存在元素時強制不漸顯
waterfall._scrollTimer2=null;
$(window).bind('scroll',function(){
clearTimeout(waterfall._scrollTimer2);
waterfall._scrollTimer2=setTimeout(onScroll,300);
});
waterfall._scrollTimer3=null;
$(window).bind('resize',function(){
clearTimeout(waterfall._scrollTimer3);
waterfall._scrollTimer3=setTimeout(onResize,300);
});
}
});
function creatColumn(){//創建列
waterfall.column_num=calculateColumns();//列數
//循環創建列
var html='';
for(var i=0;i<waterfall.column_num;i++){
html+='<div class="'+setting.column_className+'" style="width:'+setting.column_width+'px; display:inline-block; *display:inline;zoom:1; margin-left:'+setting.column_space/2+'px;margin-right:'+setting.column_space/2+'px; vertical-align:top; overflow:hidden"></div>';
}
$waterfall.prepend(html);//插入列
return $('.'+setting.column_className,$waterfall);//列集合
}
function calculateColumns(){//計算需要的列數
var num=Math.floor(($waterfall.innerWidth())/(setting.column_width+setting.column_space));
if(num<1){ num=1; } //保證至少有一列
return num;
}
function render(elements,fadein){//渲染元素
if(!$(elements).length) return;//沒有元素
var $columns = waterfall.$columns;
$(elements).each(function(i){
if(!setting.auto_imgHeight||setting.insert_type==2){//如果給出了圖片高度,或者是按順序插入,則不必等圖片加載完就能計算列的高度了
if(setting.insert_type==1){
insert($(elements).eq(i),setting.fadein&&fadein);//插入元素
}else if(setting.insert_type==2){
insert2($(elements).eq(i),i,setting.fadein&&fadein);//插入元素
}
return true;//continue
}
if($(this)[0].nodeName.toLowerCase()=='img'||$(this).find(setting.img_selector).length>0){//本身是圖片或含有圖片
var image=new Image;
var src=$(this)[0].nodeName.toLowerCase()=='img'?$(this).attr('src'):$(this).find(setting.img_selector).attr('src');
image.onload=function(){//圖片加載後才能自動計算出尺寸
image.onreadystatechange=null;
if(setting.insert_type==1){
insert($(elements).eq(i),setting.fadein&&fadein);//插入元素
}else if(setting.insert_type==2){
insert2($(elements).eq(i),i,setting.fadein&&fadein);//插入元素
}
image=null;
}
image.onreadystatechange=function(){//處理IE等浏覽器的緩存問題:圖片緩存後不會再觸發onload事件
if(image.readyState == "complete"){
image.onload=null;
if(setting.insert_type==1){
insert($(elements).eq(i),setting.fadein&&fadein);//插入元素
}else if(setting.insert_type==2){
insert2($(elements).eq(i),i,setting.fadein&&fadein);//插入元素
}
image=null;
}
}
image.src=src;
}else{//不用考慮圖片加載
if(setting.insert_type==1){
insert($(elements).eq(i),setting.fadein&&fadein);//插入元素
}else if(setting.insert_type==2){
insert2($(elements).eq(i),i,setting.fadein&&fadein);//插入元素
}
}
});
}
function public_render(elems){//ajax得到元素的渲染接口
render(elems,true);
}
function insert($element,fadein){//把元素插入最短列
if(fadein){//漸顯
$element.css('opacity',0).appendTo(waterfall.$columns.eq(calculateLowest())).fadeTo(setting.fadein_speed,1);
}else{//不漸顯
$element.appendTo(waterfall.$columns.eq(calculateLowest()));
}
}
function insert2($element,i,fadein){//按序輪流插入元素
if(fadein){//漸顯
$element.css('opacity',0).appendTo(waterfall.$columns.eq(i%waterfall.column_num)).fadeTo(setting.fadein_speed,1);
}else{//不漸顯
$element.appendTo(waterfall.$columns.eq(i%waterfall.column_num));
}
}
function calculateLowest(){//計算最短的那列的索引
var min=waterfall.$columns.eq(0).outerHeight(),min_key=0;
waterfall.$columns.each(function(i){
if($(this).outerHeight()<min){
min=$(this).outerHeight();
min_key=i;
}
});
return min_key;
}
function getElements(){//獲取資源
$.waterfall.load_index++;
return setting.getResource($.waterfall.load_index,public_render);
}
waterfall._scrollTimer=null;//延遲滾動加載計時器
function onScroll(){//滾動加載
clearTimeout(waterfall._scrollTimer);
waterfall._scrollTimer=setTimeout(function(){
var $lowest_column=waterfall.$columns.eq(calculateLowest());//最短列
var bottom=$lowest_column.offset().top+$lowest_column.outerHeight();//最短列底部距離浏覽器窗口頂部的距離
var scrollTop=document.documentElement.scrollTop||document.body.scrollTop||0;//滾動條距離
var windowHeight=document.documentElement.clientHeight||document.body.clientHeight||0;//窗口高度
if(scrollTop>=bottom-windowHeight){
render(getElements(),true);
}
},100);
}
function onResize(){//窗口縮放時重新排列
if(calculateColumns()==waterfall.column_num) return; //列數未改變,不需要重排
var $cells=waterfall.$waterfall.find(setting.cell_selector);
waterfall.$columns.remove();
waterfall.$columns=creatColumn();
render($cells,false); //重排已有元素時強制不漸顯
}
})(jQuery); 

以上代碼分為兩部分給大家介紹了PHP和Jquery和ajax實現下拉淡出瀑布流效果,代碼比較簡單,附有注釋,如有bug歡迎提出,小編會在第一時間和大家聯系的。謝謝!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved