下拉滾動條或鼠標滾輪滾動到頁面底部時, 動態即時加載新內容。
后臺用 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(iua1024@gmail.com) */ $(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歡迎提出,VeVb武林網小編會在第一時間和大家聯系的。謝謝!



















