PHP和Jquery和ajax實現下拉淡出瀑布流效果(無需插件)

来源:http://www.cnblogs.com/shouce/archive/2016/01/07/5108651.html
-Advertisement-
Play Games

不廢話,直接上代碼,您也可以點這裡看瀑布流效果演示。前臺:getMyVal('category',$_GET);$xiaohuaList=Xiaohua::model()->getXiaohao($category); //打開頁面預設顯示的數據?> id;?> ">title);?> ...


不廢話,直接上代碼,您也可以點這裡看瀑布流效果

前臺:


<?php
$category=$this->getMyVal('category',$_GET);
$xiaohuaList=Xiaohua::model()->getXiaohao($category); //打開頁面預設顯示的數據
?>

<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);

好了,全部完成了。這裡看瀑布流效果


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 筆者近2天在 Android Studio上玩了一下百度地圖,碰到了常見的"230錯誤 APP Scode校驗失敗",下麵我來介紹一下具體的解決辦法. 1.在andriodstudio上部署百度地圖的規範.把下載下來的SDK解壓,切換至Project視圖.複製以下3個文件到libs文件下. 2......
  • 2013年谷歌推出android studio後,單獨支持android開發,這是基於Java語言集成開發環境IntelliJ搭建的IDE。特別在android studio1.0穩定版出來後,谷歌將其作為官方的開發工具,也推薦開發者使用android studio。15年時候谷歌宣佈停止對ec.....
  • 前端開發在最近幾年逐漸走紅,越來越多的開發者加入前端開發隊伍。但前端在大學中沒有課程體系,而且知識也在不斷更新著。大家對它的認識也各不相同。博主有過技術經理,項目經理,面試官,前端開發的經歷,參與過較多的前端開發項目,也結識了較多前端開發人員。基於這些因素我對前端有些較深刻的認識,和大家分享下。本文...
  • 一、數組和對象操作1. $.each——遍歷$.each(obj,function(param1,param2))遍曆數組時:param1為元素序號,param2為元素內容;遍歷對象時:param1為元素屬性名,param2為元素屬性值。例如:①遍曆數組:$(function () { ...
  • 使用縮寫可以幫助減少你CSS文件的大小,更加容易閱讀。css縮寫的主要規則如下: 顏色 16進位的色彩值,如果每兩位的值相同,可以縮寫一半,例如: #000000可以縮寫為#000;#336699可以縮寫為#369; 盒尺寸 通常有下麵四種書寫方法:property:value1; 表示所...
  • 儘量避免使用DOM。當需要反覆使用DOM時,先把對DOM的引用存到JavaScript本地變數里再使用。使用設置innerHTML的方法來替換document.createElement/appendChild()方 法。eval()有問題,new Fuction()構造函數也是,儘量避免使用它們。...
  • html部分: formValidator 用戶名: 密碼: 重覆密碼: 性別: 男 女 地區:...
  • 很多創業型企業,都是追求快速把產品推向市場。也因這個因素,在設計和研發過程中,往往追求快為目標,在架構選型、代碼編寫等環節往往疏忽了性能的考慮。但這種現象是屬於正常的,一個好的產品是在客戶使用下不斷重構成長起來的。 產品的長期運行中,會隨著數據的不斷龐大、操作用戶的不斷增加及網路慢等元素,會慢慢.....
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...