js实现仿百度瀑布流的方法


Posted in Javascript onFebruary 05, 2015

本文实例讲述了js实现仿百度瀑布流的方法。分享给大家供大家参考。具体实现方法如下:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>仿百度图片瀑布流</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="js/jquery.min.js"></script>
<style>
*{margin:0; padding:0;}
#container{
width: 1000px;
border:1px solid #f00;
margin: 50px auto;
position: relative;
}
#container img{
position: absolute;
}
#loader{
width: 100%;
height: 60px;
background: url(loader.gif) no-repeat center;
position: fixed;
bottom: 0;
left: 0;
}
</style>
</head>
<script type="text/javascript">
$(function(){
 var oContainer=$('#container');
 var oLoader=$('#loader');
 var iWidth=200;//列宽
 var iSpace=10;//列数
 var iOuterWidth=iWidth+iSpace;
 var sUrl = 'localhost/api/json/popular?callback=?';
 var iCell=0;
 var iPage=0;
 var arrL=[];
 var arrT=[];
 var iBtn=true;

 function setCells(){
  iCell= Math.floor($(window).innerWidth()/iOuterWidth);
  if(iCell < 3){
   iCell =3;
  }
  if(iCell >6){
   iCell =6;
  }
  oContainer.css('width',iOuterWidth*iCell-iSpace);
 }
 setCells();
 for(var i=0;i < iCell; i++){
  arrL.push(i*iOuterWidth);
  arrT.push(0);
 }
 //console.log(arrL)
 getData()
 function getData(){
  if(iBtn){
   iBtn =false
   oLoader.show();
   $.getJSON(sUrl,'page='+iPage,function(data){
    $.each(data,function(i,obj){
     var $img =$('<img>');
     $img.attr('src',obj.preview);
     var iHeight= iWidth /obj.width * obj.height;
     var index=getMin();
     $img.appendTo(oContainer);
     $img.css({width:iWidth,height: iHeight});
     $img.css({top:arrT[index],left: arrL[index]})
     arrT[index]+=iHeight +10;
     oLoader.hide();
    })
    iPage++;
    iBtn=true;
   })
  }
 }
 $(window).on('resize',function(){
  var iOldCell= iCell;
  setCells();
  var iH = $(window).scrollTop()+$(window).innerHeight();
  var iMinIndex= getMin();
  if(arrT[iMinIndex]+oContainer.offset().top < iH){
   getData();
  }
  if(iOldCell == iCell) return ;
  arrT=[];
  arrL=[];
  for(var i=0;i < iCell; i++){
   arrL.push(i*iOuterWidth);
   arrT.push(0);
  }
  var $img = oContainer.find('img');
  $img.each(function(index,obj){
   var index=getMin();
   $(this).animate({top:arrT[index],left: arrL[index]})
   arrT[index]+=$(this).height() +10;
  })
 })
 $(window).on('scroll',function(){
  var iH = $(window).scrollTop()+$(window).innerHeight();
  var iMinIndex= getMin();
  if(arrT[iMinIndex]+oContainer.offset().top < iH){
   getData();
  }
 })
 function getMin(){
  var iv= arrT[0];
  var _index=0;
  for(var i=0; i<arrT.length; i++){
   if(arrT[i] < iv){
    iv= arrT[i];
    _index=i;
   }
  }
  return _index ;
 }
})
</script>
<body>
 <div id="top">仿百度图片瀑布流</div> 
 <!--标题 e -->
 <div id="container"></div>
 <div id="loader"></div>
 <!--效果块 e -->
</body>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
Nov 30 Javascript
关于javascript 回调函数中变量作用域的讨论
Sep 11 Javascript
node.js中使用socket.io的方法
Dec 15 Javascript
jQuery中prop()方法用法实例
Jan 05 Javascript
Jquery异步提交表单代码分享
Mar 26 Javascript
jQuery实现类似淘宝网图片放大效果的方法
Jul 08 Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 Javascript
浅谈JavaScript的计时器对象
Dec 26 Javascript
超全面的javascript中变量命名规则
Feb 09 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 Javascript
easyui下拉框动态级联加载的示例代码
Nov 29 Javascript
Vue引入jquery实现平滑滚动到指定位置
May 09 jQuery
JS函数this的用法实例分析
Feb 05 #Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
Feb 05 #Javascript
js关于命名空间的函数实例
Feb 05 #Javascript
js实现数字每三位加逗号的方法
Feb 05 #Javascript
javascript实现字符串反转的方法
Feb 05 #Javascript
Javascript中拼接大量字符串的方法
Feb 05 #Javascript
jquery操作select方法汇总
Feb 05 #Javascript
You might like
ADODB类使用
2006/11/25 PHP
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
原生js实现日历效果
2020/03/02 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
Python发送email的3种方法
2015/04/28 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
应届生法律求职信
2013/10/22 职场文书
司机岗位职责
2013/11/15 职场文书
护士实习鉴定范文
2013/12/22 职场文书
生产文员岗位职责
2014/04/05 职场文书
买房委托公证书
2014/04/08 职场文书
英语课外活动总结
2014/08/27 职场文书
打架检讨书范文
2015/01/27 职场文书
给学校的建议书400字
2015/09/14 职场文书
JavaScript实现淘宝商品图切换效果
2021/04/29 Javascript
springboot中一些比较常用的注解总结
2021/06/11 Java/Android