JS原生效果 实现:

HTML页面布局:

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link href="css/style.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript" src="js/js.js"></script>
</head>
<body>
<div id="main">
<div class="box">
<div class="pic">
<img src="img/1.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/2.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/3.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/4.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/5.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/6.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/7.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/8.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/9.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/10.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/11.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/12.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/13.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/14.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/15.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/16.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/17.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/18.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/19.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/20.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="img/21.jpg" />
</div>
</div> </div>
</body>
</html>

CSS样式效果:

 * {margin:;padding:;}
img{display: block;}
#main{position: relative;}
.box{padding: 15px 0 0 15px;float: left;}
.pic{padding: 10px;border: 1px solid #ccc; border-radius: 5px; box-shadow: 0 0 5px #ccc; display: block;}
.pic img{width: 165px;height: auto;}

JS实现:

1、将main下所有的class为box的元素取出来,封装一个获取class的一个函数 getByClass();

//根据class获取元素
function getByClass(parent,clsName){
var boxArr=[];//用来存储获取到的所有的class为box的元素
oElements=parent.getElementsByTagName("*");
for(var i=0;i<oElements.length;i++){
if(oElements[i].className==clsName){
boxArr.push(oElements[i]);
};
};
return boxArr;
};

2、计算页面当中,显示多少列(页面宽/box的宽)

var oBoxW=oBoxs[0].offsetWidth;
var cols=Math.floor(document.documentElement.clientWidth/oBoxW);
//设置main的宽
oParent.style.cssText='width:'+oBoxW*cols+'px;margin:0 auto;';

3、对页面 图片进行定位

注:第一排图片是不需要进行定位的,但是第二行的第一张图片要出现在上一行当中盒子最矮的下面,紧接着第八张依次排列上一行当中盒子最矮的下面

4、定义一个数组,存放页面上每列高度的数组!

var hArr=[];//存放每一列高度的数组

最开始,数组中存放的是第一行中每列的高度值,之后就是存放着每一列的所有高度值的总和

     for(var i=0;i<oBoxs.length;i++){//遍历所有 class为box的 盒子
if(i<cols){//如果i小于列数
hArr.push(oBoxs[i].offsetHeight);//那么 就把这些盒子的高度存放在hArr数组里
}else{
var minH=Math.min.apply(null,hArr);
var index=getMinhIndex(hArr,minH);
oBoxs[i].style.position='absolute';
oBoxs[i].style.top=minH+'px';
oBoxs[i].style.left=oBoxW*index+'px'; hArr[index]+=oBoxs[i].offsetHeight;//修改列的高度
};
};

5、判断数组中最小的值:

var minH=Math.min.apply(null,hArr);

求出最小值在数组中的索引值 :

遍历数组中每一个值,拿每一个值跟val比较,如果 相等,则该索引值就是我们需要的

function getMinhIndex(arr,val){
for(var i in arr){
if(arr[i]==val){
return i;
}
}
};

6、拖动滚动条,不断加载剩下的图片!并不是拖动了滚动条,我们 就 需要 加载数据,我们需要检测一下,是否具备加载数据块的条件!(检测最后一张图片

当我们拖动滚动条的时候,最后一张图片还未进入可视区域内,是不需要加载图片的!

当最后一张图片进入到 可视区域高度的一半的时候,开始加载图片!

判断当最后一张图片高度的一半距离页面顶部的距离滚动条滚动的距离+页面可是的区域 成立的时候,开始加载图片!

//检测是否具备了滚动条加载数据的条件
function checkScrollSlide(){
var oParent=document.getElementById('main');
var oBoxs=getByClass(oParent,'box');
var lastBoxH=oBoxs[oBoxs.length-1].offsetTop+Math.floor(oBoxs[oBoxs.length-1].offsetHeight/2);
var scrollTop=document.body.scrollTop || document.documentElement.scrollTop;
var height=document.body.clientHeight || document.documentElement.clientHeight; return (lastBoxH<scrollTop+height)?true:false;
};
	window.onscroll=function(){
if(checkScrollSlide){
var oParent=document.getElementById('main');
for(var i=0;i<dataInt.data.length;i++){
var oBox=document.createElement("div");
oBox.className='box';
oParent.appendChild(oBox);
var oPic=document.createElement("div");
oPic.className='pic';
oBox.appendChild(oPic);
var oImg=document.createElement("img");
oImg.src='img/'+dataInt.data[i].src;
oPic.appendChild(oImg);
}; waterfall("main","box");
};

最新文章

  1. 写个shell脚本
  2. Hashtable和Dictionary&lt;T,K&gt;的使用
  3. typedef typedef struct的使用
  4. sqlserver自定义函数【粘】
  5. An error occurred while collecting items to be installed session context was:(profile=DefaultProfile... 解决方案
  6. eclipse svn安装
  7. [git] git 的基本认知
  8. openstack neutron debugs lists
  9. Oracle 重建索引脚本
  10. hdu 2710 Max Factor 数学(水题)
  11. python中sys.exit()和os._exit(0)退出程序
  12. JQuery EasyUI combobox(下拉列表框)
  13. 学习笔记《Java多线程编程实战指南》二
  14. |ERROR|ERROR: missing data for column &quot;createtime&quot; (seg3 slice1 192.168.66.23:40001 pid=33370)之mysql换行符或者空格引起的问题
  15. Logstash 解析Json字符串,删除json嵌套字段
  16. php 中文转拼音,可以只转首字母,可以设置utf8、gbk
  17. 7-12 How Long Does It Take
  18. PAT-1001 采花生
  19. 阿里云Maven仓库
  20. e681. 基本的打印程序

热门文章

  1. 50款强力jquey,js 插件推荐
  2. Topcoder SRM570 900 CurvyonRails
  3. H5之contenteditable
  4. 用java实现简易PC版2048
  5. sql之多表连接
  6. PHPExcel读取Excel文件的实现代码
  7. 适配iOS10 的相关权限设置
  8. centos设置静态ip地址
  9. VMware Workstation安装MAC OS X系统
  10. 5、 Android 之Fragment