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");
};

JS原生效果瀑布流布局的实现(一)的更多相关文章

  1. 原生js实现图片瀑布流布局,注释超详细

    完整代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  2. 原生js实现的瀑布流布局

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. js实现网页瀑布流布局

    效果图: html代码实现网页布局: <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  4. 手把手教你js原生瀑布流效果实现

    手把手教你js原生瀑布流效果实现 什么是瀑布流效果 首先,让我们先看一段动画: 在动画中,我们不难发现,这个动画有以下特点: 1.所有的图片的宽度都是一样的 2.所有的图片的高度是不一样的 3.图片一 ...

  5. JS 瀑布流布局

    瀑布流布局 HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...

  6. JS案例之6——瀑布流布局(1)

    在实际的项目中,偶尔会用到一种布局——瀑布流布局.瀑布流布局的特点是,在多列布局时,可以保证内容区块在水平方向上不产生大的空隙,类似瀑布的效果.简单的说,在垂直列表里,内容区块是一个挨着一个的.当内容 ...

  7. 纯js实现瀑布流布局及ajax动态新增数据

    本文用纯js代码手写一个瀑布流网页效果,初步实现一个基本的瀑布流布局,以及滚动到底部后模拟ajax数据加载新图片功能. 缺点: 1. 程序不是响应式,不能实时调整页面宽度: 2. 程序中当新增ajax ...

  8. JS瀑布流布局模式(1)

    在实际的项目中,偶尔会用到一种布局——瀑布流布局.瀑布流布局的特点是,在多列布局时,可以保证内容区块在水平方向上不产生大的空隙,类似瀑布的效果.简单的说,在垂直列表里,内容区块是一个挨着一个的.当内容 ...

  9. 原生 JS 实现一个瀑布流插件

    更好的阅读体验,点击 原文地址 瀑布流布局中的图片有一个核心特点 -- 等宽不定等高,瀑布流布局在国内网网站都有一定规模的使用,比如pinterest.花瓣网等等.那么接下来就基于这个特点开始瀑布流探 ...

随机推荐

  1. border家族

    border-style:dotted solid double dashed(上边框是点状,右边框是实线,下边框是双线,左边框是虚线)边框样式;border-width(边框宽度);border-r ...

  2. 楼盘信息sq

    ID:1 楼盘名称:帝豪国际 网址:http://shangqiu.jiwu.com/loupan/239023.html 价格:2500元/平米 关注人数:497 地址:长寿大道南段 情况:在售 大 ...

  3. Java--静态区域块

    public class Demo3_2 { static int i=1; static //静态区域块 { //该静态区域块只被执行一次 System.out.println("a&qu ...

  4. Kettle6.0安装及问题总结-白痴教程

    1.安装JDK 配置java环境变量 2.安装KETTLE: 官方下载地址:http://community.pentaho.com/projects/data-integration/ 下载完后,解 ...

  5. Sql Server xml 类型字段的增删改查

    1.定义表结构 在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型 2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据. 需 ...

  6. spark 1.5.2配置记录

    1)slaves # A Spark Worker will be started on each of the machines listed below. dataNode 2)spark-env ...

  7. wdcp 下apache模式开启https访问,支持多站点

    1.vi conf/httpd.conf 查找 #Include conf/extra/httpd-ssl.conf (删除行首的配置语句注释符号"#"保存退出) 2.vi con ...

  8. php上传文件类型

    下面提供一张IE和火狐浏览器的文件类型对照表: ie 火狐 id 后缀名 php识别出的文件类型 0 gif image/gif 1 jpg image/jpeg 2 png image/png 3 ...

  9. JavaScript 对象的创建

    Object类型是JavaScript中使用最多的一种类型.创建Object实例的方式有多种,接下来一一列举. 1. Object构造函数 person1的friends属性修改影响了person2的 ...

  10. 64位Win7 VS调试、PLSQL与oracle的连接异常问题

    系统换为64位Win7后,VS与Oracle开发环境出现了很多问题.调试无法连接Oracle,PLSQL无法连接Oracle等一系列问题.下面记录一下处理办法: 1.oracle客户端选择32位进行安 ...