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 相关文章推荐
Add a Picture to a Microsoft Word Document
Jun 15 Javascript
Exitjs获取DataView中图片文件名
Nov 26 Javascript
html组件不可输入(只读)同时任何组件都有效
Apr 01 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
Aug 30 Javascript
jQuery实现Tab选项卡切换效果简单演示
Nov 23 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
深入浅析vue组件间事件传递
Dec 29 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
Apr 17 Javascript
react基本安装与测试示例
Apr 27 Javascript
微信小程序实现点击生成随机验证码
Sep 09 Javascript
在Vue中使用Echarts实例图的方法实例
Oct 10 Javascript
vue+swiper实现左右滑动的测试题功能
Oct 30 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.ini中文版
2006/10/09 PHP
PHP中的日期处理方法集锦
2007/01/02 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
初识ThinkPHP控制器
2016/04/07 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP用swoole+websocket和redis实现web一对一聊天
2019/11/05 PHP
javascript之AJAX框架使用说明
2010/04/24 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
Django实现组合搜索的方法示例
2018/01/23 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
销售实习自我鉴定
2013/12/07 职场文书
小学亲子活动总结
2014/07/01 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
管理失职检讨书
2015/05/05 职场文书
党内外群众意见范文
2015/06/02 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python