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 相关文章推荐
Span元素的width属性无效果原因及解决方案
Jan 15 Javascript
JavaScript 学习笔记(十四) 正则表达式
Jan 22 Javascript
一段批量给页面上的控件赋值js
Jun 19 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
Mar 21 Javascript
JS继承--原型链继承和类式继承
Apr 08 Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 Javascript
jquery 插件实现瀑布流图片展示实例
Apr 03 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
Jun 12 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
Nov 15 Javascript
基于Vue实现页面切换左右滑动效果
Jun 29 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 Javascript
如何理解Vue前后端数据交互与显示
May 10 Vue.js
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的十大要点(上)
2009/02/04 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
asp 的 分词实现代码
2007/05/24 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
jquery禁止回车触发表单提交
2014/12/12 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
小班秋游活动方案
2014/02/22 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
小学体育队列队形教学反思
2016/02/16 职场文书
详解CSS故障艺术
2021/05/25 HTML / CSS
利用python进行数据加载
2021/06/20 Python
Django Paginator分页器的使用示例
2021/06/23 Python
Java并发编程必备之Future机制
2021/06/30 Java/Android
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js