目錄
PHP结合Jquery和ajax实现瀑布流特效,jqueryajax
预览无效果请刷新
图片标题
您可能感兴趣的文章:
首頁 後端開發 php教程 PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程

PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程

Jul 12, 2016 am 09:01 AM
dreamweaver jquery 瀑布流

PHP结合Jquery和ajax实现瀑布流特效,jqueryajax

不废话,直接上代码,

前台:

<&#63;php 
$category=$this->getMyVal('category',$_GET);
$xiaohuaList=Xiaohua::model()->getXiaohao($category); //打开页面默认显示的数据
&#63;>
<div id="waterfall">
  <&#63;php foreach ($xiaohuaList as $xiaohua):&#63;>
    <&#63;php $q_id=$xiaohua->id;&#63;>
    <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_<&#63;php echo $q_id;&#63;>"><&#63;php echo CHtml::encode($xiaohua->title);&#63;></strong></div>
      <div class="padding-t-5 fx_c_<&#63;php echo $q_id;&#63;>"><&#63;php echo $xiaohua->content;&#63;></div>
      <div class="padding-t-5 text-right"><span onclick="fx(<&#63;php echo $q_id;&#63;>);" class="fx cursor_p" data-id="<&#63;php echo $q_id;&#63;>"><span class="g-bg glyphicon glyphicon-share-alt margin-r-5" aria-hidden="true"></span>分享</span></div>
    </div>
  <&#63;php endforeach;&#63;>
</div>
<script>
var opt={
 getResource:function(index,render){//index为已加载次数,render为渲染接口函数,接受一个dom集合或jquery对象作为参数。通过ajax等异步方法得到的数据可以传入该接口进行渲染,如 render(elem)
   var html='';
   var _url='<&#63;php echo $this->createUrl('listXiaohua');&#63;>';
   $.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'&#63;$(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);
登入後複製

好了,全部完成了。

再给大家分享一个吧

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>定宽Jquery+AJAX+JSON瀑布流布局(每行代码都有详细注释)</title>
<style type="text/css">
body, ul, li, h3 { margin: 0; padding: 0; list-style: none; font: bold 12px "微软雅黑"; }
/*瀑布流布局样式*/
#lxf-box { position: relative; width: 1000px; margin:0 auto;}
#lxf-box li { background: #fff; border: solid 1px #ccc; text-align: center; padding: 10px; float: left;}
h3 { padding-top: 8px; }
img { width: 200px; height: auto; display: block; border: 0 }
/*css3动画 注由于是css3制作的所以兼容性不保证 要想兼容性好 请自己做成gif动画加载图*/
/*li { -webkit-transition: all .7s ease-out .1s; -moz-transition: all .7s ease-out; -o-transition: all .7s ease-out .1s; transition: all .7s ease-out .1s }*/
#loading { display:none; line-height: 30px; background: #000; color:#fff; text-align: center; height: 30px; width: 100%; position:fixed; bottom:0; opacity:0.8;}
</style>
<script src="/templets/niu/js/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<h1 id="预览无效果请刷新">预览无效果请刷新</h1>
<ul id="lxf-box">
 <li><a href="div_css/342.html"><img  src="/static/imghw/default1.png"  data-src="/uploads/allimg/120814/1-120Q411544TX.jpg"  class="lazy" alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a>
  <h3 id="图片标题">图片标题</h3>
 </li>
 <li><a href="/ajax/237.html"><img  src="/static/imghw/default1.png"  data-src="/uploads/allimg/120801/1-120P1223013157.jpg"  class="lazy" alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a>
  <h3 id="图片标题">图片标题</h3>
 </li>
 <li><a href="/js_ad/271.html/"><img  src="/static/imghw/default1.png"  data-src="/uploads/allimg/120808/1-120PP00915a2.jpg"  class="lazy" alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a>
  <h3 id="图片标题">图片标题</h3>
 </li>
 <li><a href="/js_texiao/312.html/"><img  src="/static/imghw/default1.png"  data-src="/uploads/allimg/120812/1-120Q2150022G8.jpg"  class="lazy" alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a>
  <h3 id="图片标题">图片标题</h3>
 </li>
 <li><a href="/js_pic/191.html/"><img  src="/static/imghw/default1.png"  data-src="/uploads/allimg/120722/1-120H2144003129.jpg"  class="lazy" alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a>
  <h3 id="图片标题">图片标题</h3>
 </li>
 <li><a href="/js_pic/318.html/"><img  src="/static/imghw/default1.png"  data-src="/uploads/allimg/120812/1-120Q2161941b2.jpg"  class="lazy" alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a>
  <h3 id="图片标题">图片标题</h3>
 </li>
 <li><a href="/div_css/341.html/"><img  src="/static/imghw/default1.png"  data-src="/uploads/allimg/120814/1-120Q4113240U2.jpg"  class="lazy" alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a>
  <h3 id="图片标题">图片标题</h3>
 </li>
 <li><a href="/div_css/350.html/"><img  src="/static/imghw/default1.png"  data-src="/uploads/allimg/120814/125411K11-2.png"  class="lazy" alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a>
  <h3 id="图片标题">图片标题</h3>
 </li>
 <li><a href="/div_css/350.html/"><img  src="/static/imghw/default1.png"  data-src="/uploads/allimg/120814/1254113249-12.png"  class="lazy" alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a>
  <h3 id="图片标题">图片标题</h3>
 </li>
 <li><a href="/div_css/349.html/"><img  src="/static/imghw/default1.png"  data-src="/uploads/allimg/120814/12500a292-1.png"  class="lazy" alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a>
  <h3 id="图片标题">图片标题</h3>
 </li>
 <li>img src="/uploads/allimg/120813/1-120Q3145U0938.jpg">
  <h3 id="图片标题">图片标题</h3>
 </li>
 <li><a href="/div_css/344.html/"><img  src="/static/imghw/default1.png"  data-src="/uploads/allimg/120814/12353B521-0.jpg"  class="lazy" alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a>
  <h3 id="图片标题">图片标题</h3>
 </li>
</ul>
<div id="loading">正在加载……</div>
<script>
/*
原理:1.把所有的li的高度值放到数组里面
   2.第一行的top都为0
   3.计算高度值最小的值是哪个li
   4.把接下来的li放到那个li的下面
编写时间:2012年6月9日
*/
 
function iiwnet(){//定义成函数便于调用
var wrap = document.getElementById("lxf-box")
var margin = 10;//这里设置间距
var li=$("li");//这里是区块名称
var li_W = li[0].offsetWidth+margin;//取区块的实际宽度(包含间距,这里使用源生的offsetWidth函数,不适用jQuery的width()函数是因为它不能取得实际宽度,例如元素内有pandding就不行了)
var h=[];//记录区块高度的数组
  li.css("position","absolute");
  var n = wrap.offsetWidth/li_W|0;//容器的宽度除以区块宽度就是一行能放几个区块
  for(var i = 0;i < li.length;i++) {//有多少个li就循环多少次
    li_H = li[i].offsetHeight;//获取每个li的高度
    if(i < n) {//n是一行最多的li,所以小于n就是第一行了
      h[i]=li_H;//把每个li放到数组里面
      li.eq(i).css("top",0);//第一行的Li的top值为0
      li.eq(i).css("left",i * li_W);//第i个li的左坐标就是i*li的宽度
      }
    else{
      min_H =Math.min.apply(null,h) ;//取得数组中的最小值,区块中高度值最小的那个
      minKey = getarraykey(h, min_H);//最小的值对应的指针
      h[minKey] += li_H+margin ;//加上新高度后更新高度值
      li.eq(i).css("top",min_H+margin);//先得到高度最小的Li,然后把接下来的li放到它的下面
      li.eq(i).css("left",minKey * li_W); //第i个li的左坐标就是i*li的宽度
    }
    $("h3").eq(i).text("编号:"+i+",高度:"+li_H);//把区块的序号和它的高度值写入对应的区块H3标题里面
    $("li").animate({opacity:1});
  }
}
/* 使用for in运算返回数组中某一值的对应项数(比如算出最小的高度值是数组里面的第几个) */
function getarraykey(s, v) {for(k in s) {if(s[k] == v) {return k;}}}
/*这里一定要用onload,因为图片不加载完就不知道高度值*/
window.onload = function() {iiwnet();};
/*浏览器窗口改变时也运行函数*/
window.onresize = function() {iiwnet();};
 
/**********************************************************************/
/*无限加载*/
var i=1;
function getMore(){
  $("#loading").show();  
  var json = "http://www.bkjia.com/images/jstx/img.js";
    $.getJSON(json, function(data){ 
        $.each(data,function(i){
        var url=data[i].url;  
        var html="<li style='opacity:0'><a href='http://www.bkjia.com/'><img  src="/static/imghw/default1.png"  data-src="+url+"  class="lazy"  alt="PHP结合Jquery和ajax实现瀑布流特效,jqueryajax_PHP教程" ></a><h3 id="图片标题">图片标题</h3></li>";    
      $("#lxf-box").append(html);   
          $("#loading").hide();
        });
        iiwnet();
        i=1
    });
  };
  /*滚动到底部的时候*/
   $(window).bind("scroll",function(){
  if( $(document).scrollTop() + $(window).height() > $(document).height() - 10 && i==1) {
    i=0;
    getMore();
     
    }
   });
</script>
</body>
</html>
<p align="center"><font color=red>如果运行效果无非显示请点击【刷新页面】</font><br/>【<a href="http://www.bkjia.com" target="_blank"><font color="#666666">返回首页</font></a>】【<a href="javascript:this.location.reload()"><font color="#666666">刷新本页</font></a>】【<a href="javascript:window.scroll(0,0)"><font color="#666666">返回顶部</font></a>】【<a href="javascript:window.close()"><font color="#666666">关闭本页</font></a>】</p>
              
登入後複製

您可能感兴趣的文章:

  • jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
  • jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
  • PHP和Jquery和ajax实现下拉淡出瀑布流效果(无需插件)

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1089588.htmlTechArticlePHP结合Jquery和ajax实现瀑布流特效,jqueryajax 不废话,直接上代码, 前台: php $category=$this-getMyVal('category',$_GET);$xiaohuaList=Xiaohua::model()-getXi...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

dreamweaver怎麼調整文字位置 dreamweaver怎麼調整文字位置 Apr 09, 2024 am 02:24 AM

Dreamweaver 中調整文字位置可以透過以下步驟完成:選擇文本,使用文字位置調整器進行水平調整:左對齊、右對齊、居中對齊;2. 進行垂直調整:上對齊、下對齊、垂直居中;3. 按Shift 鍵並使用方向鍵微調位置;4. 使用快速鍵快速對齊:左對齊(Ctrl/Cmd + L)、右對齊(Ctrl/Cmd + R)、居中對齊(Ctrl/Cmd + C)。

dreamweaver網頁製作怎麼加入影片 dreamweaver網頁製作怎麼加入影片 Apr 09, 2024 am 01:42 AM

使用 Dreamweaver 嵌入影片:插入影片元素。選擇並上傳視訊檔案。設定影片類型、URL、尺寸、自動播放和控制。插入影片。可選:自訂影片外觀。

dreamweaver怎麼調整行間距 dreamweaver怎麼調整行間距 Apr 09, 2024 am 03:00 AM

在 Dreamweaver 中調整行間距分四步驟進行:選擇文字、開啟「段落」面板、調整「行距」選項,最後按一下「確定」以套用變更。

dreamweaver怎麼加入圖片 dreamweaver怎麼加入圖片 Apr 09, 2024 am 03:30 AM

要在 Dreamweaver 中插入圖片,請點擊“插入”選單並選擇“圖像”,然後導航到圖片檔案並選擇它。其他方法包括:拖放檔案或直接插入 HTML 程式碼。調整屬性包括更改大小、對齊、新增邊框和輸入替代文字。

dreamweaver字體怎麼設定 dreamweaver字體怎麼設定 Apr 09, 2024 am 02:54 AM

可以在 Dreamweaver 中透過以下方式設定字體:使用「屬性」面板選擇字體、字號、顏色。使用 CSS 設定整個網站或特定元素的字體。在 HTML 程式碼中直接使用「font」標籤設定字體。

網頁設計軟體dreamweaver怎麼設定為中文 網頁設計軟體dreamweaver怎麼設定為中文 Apr 09, 2024 am 12:39 AM

若要將Dreamweaver 設定為中文,請按以下步驟操作:開啟Dreamweaver;在首選項中將「使用者介面語言」變更為「簡體中文」或「繁體中文」;重新啟動Dreamweaver;檢查「說明」選單中的“關於Dreamweaver」項目以驗證語言設定。

dreamweaver網頁製作後怎麼匯出 dreamweaver網頁製作後怎麼匯出 Apr 09, 2024 am 01:27 AM

在 Dreamweaver 中匯出網頁包括以下步驟:匯出 HTML 檔案:在“檔案”選單中選擇“匯出”,選擇“HTML”,選擇檔案名稱和位置,點擊“儲存”。匯出 CSS 和 JavaScript 檔案:在“檔案”選單中選擇“匯出”,選擇“CSS”或“JavaScript”,選擇檔案名稱和位置,點擊“儲存”。匯出圖像:右鍵點擊圖像,選擇“匯出”,選擇圖像格式和檔案名,點擊“儲存”。

dreamweaver怎麼正文縮排 dreamweaver怎麼正文縮排 Apr 09, 2024 am 02:15 AM

Dreamweaver 中縮排正文的方法有四種:縮排單一段落:格式> 段落> 縮排多段落:段落面板中設定縮排值使用樣式:在段落樣式對話方塊中設定縮排值使用縮排鍵:Tab 鍵向右縮進,Shift + Tab 鍵向左縮排

See all articles