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 相关文章推荐
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
Dec 23 Javascript
Javascript 刷新全集常用代码
Nov 22 Javascript
request请求获取参数的实现方法(post和get两种方式)
Sep 27 Javascript
简单三步实现报表页面集成天气
Dec 15 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
Mar 07 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
Apr 01 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
May 12 Javascript
JS继承与闭包及JS实现继承的三种方式
Oct 15 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
Jun 14 Javascript
jQuery实现table表格checkbox全选的方法分析
Jul 04 jQuery
小程序实现多列选择器
Feb 15 Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
Python环境变量设置方法
2016/08/28 Python
Django与JS交互的示例代码
2017/08/23 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
Python运行DLL文件的方法
2020/01/17 Python
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
思想政治自我鉴定
2013/10/06 职场文书
活动总结书
2014/05/08 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
小学四年级学生评语
2014/12/26 职场文书
个人培训总结
2015/03/05 职场文书
班主任自我评价范文
2015/03/11 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
杨善洲电影观后感
2015/06/04 职场文书
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP
使用Python开发冰球小游戏
2022/04/30 Python