java瀑布流_原生JS实现瀑布流效果

【前言】

近期开始讲到高阶JS,为了提高学习兴趣,再讲点特效。本次简单总结下JS实现瀑布流特效

样式特点:

(1)呈现出等宽不等高,参差不齐排列

(2)拖动滚动条时会不断加载新数据,甚至可以无限往下拖动,一直拖一直加载新数据

实现方案:

①原生JS;②jQuery库;③CSS3的多栏布局

【主体】

直接上代码,具体意思里面有注释,注意文件位置

JS

/*代码初始化*/

*{

margin: 0;

padding: 0;

}

/*代码主体*/

#main{

position: relative;

margin: 0 auto;

}

/*砖头缝隙*/

.box{

padding: 15px 0 0 15px;

float: left;

}

/*盒子样式*/

.pic{

padding: 10px;

border: 1px solid #ccc;

border-radius: 5px;

box-shadow: 0 0 5px #ccc;

}

.pic img{

width: 165px;

height: auto;

}

01.jpg

02.jpg

03.jpg

04.jpg

05.jpg

06.jpg

07.jpg

08.jpg

09.jpg

10.jpg

01.jpg

02.jpg

03.jpg

04.jpg

05.jpg

06.jpg

07.jpg

08.jpg

09.jpg

10.jpg

01.jpg

02.jpg

03.jpg

04.jpg

05.jpg

06.jpg

07.jpg

08.jpg

09.jpg

10.jpg

01.jpg

02.jpg

03.jpg

04.jpg

05.jpg

06.jpg

07.jpg

08.jpg

09.jpg

10.jpg

01.jpg

02.jpg

03.jpg

04.jpg

05.jpg

06.jpg

07.jpg

08.jpg

09.jpg

10.jpg

01.jpg

02.jpg

03.jpg

04.jpg

05.jpg

06.jpg

07.jpg

08.jpg

09.jpg

10.jpg

var dataList = {

"data":[

{"src":"01.jpg"},

{"src":"02.jpg"},

{"src":"03.jpg"},

{"src":"04.jpg"},

{"src":"05.jpg"},

{"src":"06.jpg"},

{"src":"07.jpg"},

{"src":"08.jpg"}

]

}

window.onload = function(){

waterFall();

window.onscroll = function(){

change();

}

}

function waterFall(){

//1、获取box盒子

var main = document.getElementById("main");

var box = main.getElementsByClassName("box");

//2、计算列数(页面宽/box宽)

var boxWidth = box[0].offsetWidth;//盒子宽度

var docWidth = document.documentElement.clientWidth;//页面宽度

var cols = Math.floor(docWidth/boxWidth);

// 3、设置main宽度

main.style.width = boxWidth*cols+"px";

// 4、对比高度

var boxArray = [];//存放每一列高度

for(var i=0;i

if(i

boxArray.push(box[i].offsetHeight);

}else{

// 5、计算最矮高度

var minH = Math.min.apply(null,boxArray);//最矮高度

var MinHindex = boxArray.indexOf(minH);

//6、设置下一行图片位置

box[i].style.position = "absolute";

box[i].style.top = minH + "px";

//左侧计算boxbox[i].style.left = boxWidth*MinHindex + "px";

box[i].style.left = box[MinHindex].offsetLeft + "px";

// 7、添加完后,将其高度做改变

boxArray[MinHindex] += box[i].offsetHeight;

}

}

}

//检测是否具备记载条件

function change(){

//判断是否具备加载条件

//1、获取box盒子

var main = document.getElementById("main");

var box = main.getElementsByClassName("box");

// 2、获取最后一个块距离父级元素main的顶部距离

var lastBoxH = box[box.length-1].offsetTop;

var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;

var height = document.body.clientHeight || document.documentElement.clientHeight;

if(scrollTop+height>lastBoxH){

//将数据块放到页面里

// (1)遍历数据

for(var i=0;i

// (2)创建元素节点

var newBox = document.createElement("div");

// newBox.setAttribute("class","box");

newBox.className = "box animated slideInUp";

main.appendChild(newBox);

var newPic = document.createElement("div");

newPic.className = "pic";

newBox.appendChild(newPic);

var newImg = document.createElement("img");

newImg.src = "img/"+dataList.data[i].src;

newPic.appendChild(newImg);

}

//新增后再次瀑布流

waterFall();

}

}

.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值