怎么在PHP中利用Jquery和ajax实现一个瀑布流效果
创始人
2024-12-11 00:21:30
0次
getMyVal('category',$_GET);
$xiaohuaList=Xiaohua::model()->getXiaohao($category); //打开页面默认显示的数据
?>

  
    id;?>
    
      ">title);?>
      ">content;?>
      );" class="fx cursor_p" data-id="">分享
    
  

后台:

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.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()=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);

好了,全部完成了。

再给大家分享一个吧





定宽Jquery+AJAX+JSON瀑布流布局(每行代码都有详细注释)

body, ul, li, h4 { 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;}
h4 { 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;}




预览无效果请刷新

 
  •   

    图片标题

     
  •  
  •   

    图片标题

     
  •  
  •   

    图片标题

     
  •  
  •   

    图片标题

     
  •  
  •   

    图片标题

     
  •  
  •   

    图片标题

     
  •  
  •   

    图片标题

     
  •  
  •   

    图片标题

     
  •  
  •   

    图片标题

     
  •  
  •   

    图片标题

     
  •  
  • img src="/uploads/allimg/120813/1-120Q3145U0938.jpg">   

    图片标题

     
  •  
  •   

    图片标题

     
  • 正在加载……
    如果运行效果无非显示请点击【刷新页面】
    【返回首页】【刷新本页】【返回顶部】【关闭本页】

    相关内容

    热门资讯

    空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
    空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
    格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
    空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
    格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
    品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
    空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
    空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
    中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
    中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...