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 相关文章推荐
权威JavaScript 中的内存泄露模式
Aug 13 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
Jan 22 Javascript
javascript实现当前页导航激活的方法
Feb 27 Javascript
jquery实现的Banner广告收缩效果代码
Sep 02 Javascript
jquery实现的点击翻书效果代码
Nov 04 Javascript
js操作table元素实现表格行列新增、删除技巧总结
Nov 18 Javascript
Angular表单验证实例详解
Oct 20 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
Jan 16 Javascript
详解Puppeteer 入门教程
May 09 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
Sep 21 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
Oct 14 Javascript
基于JavaScript伪随机正态分布代码实例
Nov 07 Javascript
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
劣质的PHP代码简化
2010/02/08 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
python实现在目录中查找指定文件的方法
2014/11/11 Python
在Django的模板中使用认证数据的方法
2015/07/23 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
使用python制作一个解压缩软件
2019/11/13 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
CSS3点击按钮实现背景渐变动画效果
2016/10/19 HTML / CSS
装修协议书范本
2014/04/21 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
团队队名口号大全
2014/06/06 职场文书
安全目标责任书
2014/07/22 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
简单的辞职信模板
2015/05/12 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript