大致介绍

在慕课网上学习了用原生js和jQuery实现瀑布流,在这里做个笔记
用JavaScript实现
基本结构:
<div id="main"> <div class="box"> <div class="pic"><img src="images/1.jpg" alt=""></div> </div> <div class="box"> <div class="pic"><img src="images/2.jpg" alt=""></div> </div> ... ... ... </div>
基本样式:
*{
margin: 0px;
padding: 0px;
}
#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;
}
思路:
1、获取#main下的所有.box
2、计算页面中图片有几列,并设置页面的宽度
3、找出这几列中高度最小的列
4、从第二行开始,设置图片为相对定位,把一张图片放到高度最小列的下面
5、更新列的高度,重复3、4、5步骤,直至图片加载完
6、根据最后一张图片的位置确定是否继续加载图片(懒加载)
实现:
1、获取#main下的所有.box
//将main下的所有class为box的元素取出来 var oParent = document.getElementById(parent); var oBox = getByClass(oParent,box);
// 根据class获取元素
function getByClass(parent,clsname){
var arr = [];//用来存储获取到的所有class为box的元素
var oElement = parent.getElementsByTagName('*');
for(var i=0;i<oElement.length;i++){
if(oElement[i].className == clsname){
arr.push(oElement[i]);
}
}
return arr;
}
2、计算页面中图片有几列,并设置页面的宽度
//计算整个页面显示的列数(页面宽/box的宽) var oBoxW = oBox[0].offsetWidth; var cols = Math.floor(document.documentElement.clientWidth/oBoxW); //设置main的宽 oParent.style.cssText = 'width:' + oBoxW*cols + 'px;margin:0 auto;';
3、找出这几列中高度最小的列
4、从第二行开始,设置图片为相对定位,把一张图片放到高度最小列的下面
5、更新列的高度,重复3、4、5步骤,直至图片加载完
//存储每列的高度
var hArr = [];
for(var i=0;i<oBox.length;i++){
if(i<cols){
//第一行图片的高度
hArr.push(oBox[i].offsetHeight);
}else{
var minH = Math.min.apply(null,hArr);
var index = getMinIndex(hArr,minH);
oBox[i].style.position = "absolute";
oBox[i].style.top = minH + 'px';
//oBox[i].style.left = oBoxW*index+'px';
oBox[i].style.left = oBox[index].offsetLeft + 'px';
//更新每列的高度
hArr[index] += oBox[i].offsetHeight;
}
}
//获取每列高度最小的索引值
function getMinIndex(arr,value){
for(var i in arr){
if(arr[i] == value){
return i;
}
}
}
6、根据最后一张图片的位置确定是否继续加载图片(懒加载)
假设是后台给的数据
//数据
var dataInt = {'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'}]};
当滚动条滚动时执行
//滚动条滚动时
window.onscroll = function(){
scrollSlide(dataInt);
}
根据最后一张图片的位置,来判断是否进行加载
//判断是否具有了滚条加载数据块的条件
function checkScrollSlide(parent,clsname){
var oParent = document.getElementById(parent);
var oBox = getByClass(oParent,clsname);
var lastBoxH = oBox[oBox.length-1].offsetTop + Math.floor(oBox[oBox.length-1].offsetHeight/2);
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
var height = document.documentElement.clientHeight || document.body.clientHeight;
return (lastBoxH < scrollTop + height)? true:false;
}
加载图片
//滚动条滚动时执行
function scrollSlide(dataInt){
////判断是否具有了滚条加载数据块的条件
if(checkScrollSlide('main','box')){
var oParent = document.getElementById('main');
//将数据块渲染到当前页面的尾部
for(var i=0;i<dataInt.data.length;i++){
var oBoxs = document.createElement('div');
oBoxs.className = 'box';
oParent.appendChild(oBoxs);
var oPic = document.createElement('div');
oPic.className = 'pic';
oBoxs.appendChild(oPic);
var oImg = document.createElement('img');
oImg.src = 'images/' + dataInt.data[i].src;
oPic.appendChild(oImg);
}
waterfall('main','box');
}
用jQurey实现
用jQuery实现的思路都是一样的,就直接放代码
$(window).on('load',function(){
waterfall();
var dataInt={'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'}]};
$(window).on('scroll',function(){
scrollSlide(dataInt);
})
});
function waterfall(){
var $oBox = $('#main>div');
var oBoxW = $oBox.eq(0).outerWidth();
var cols = Math.floor($(window).width()/oBoxW);
$('#main').css({
'width' : cols * oBoxW,
'margin' : '0 auto'
});
var hArr = [];
$oBox.each(function(index,value){
var oBoxH = $oBox.eq(index).height();
if(index<cols){
hArr.push(oBoxH);
}else{
var minH = Math.min.apply(null,hArr);
var minHIndex = $.inArray(minH,hArr);
$(value).css({
'position' : 'absolute',
'top': minH + 15,
'left' : $oBox.eq( minHIndex ).position().left
});
hArr[minHIndex] += $oBox.eq(index).height() + 15;
}
});
}
function checkScrollSlide(){
var $lastBox = $('#main>div').last();
var lastBoxH = $lastBox.offset().top + Math.floor($lastBox.height()/2);
var scrollTop = $(window).scrollTop();
var clientH = $(window).height();
return (lastBoxH < scrollTop + clientH) ? true : false;
}
function scrollSlide(dataInt){
if(checkScrollSlide()){
$.each(dataInt.data,function(index,value){
var $Box = $('<div>').addClass('box').appendTo('#main');
var $Pic = $('<div>').addClass('pic').appendTo($Box);
$('<img>').attr('src','images/' + $(value).attr('src')).appendTo($Pic);
})
waterfall();
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# jquery实现瀑布流
# javascript瀑布流
# jquery
# 瀑布流
# Jquery瀑布流插件使用介绍
# jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
# jQuery瀑布流插件Wookmark使用实例
# jQuery Masonry瀑布流插件使用详解
# jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
# jQuery实现瀑布流布局
# js实现的美女瀑布流效果代码
# javascript自适应宽度的瀑布流实现思路
# 原生JS实现响应式瀑布流布局
# 解析瀑布流布局:JS+绝对定位的实现
# 纯js实现瀑布流展现照片(自动适应窗口大小)
# 加载
# 滚动条
# 判断是否
# 在这里
# 做个
# 是一样的
# 网上
# solid
# ccc
# 有几列
# shadow
# radius
# border
# relative
# position
# padding
# left
# float
# clsname
# function
相关文章:
再谈Python中的字符串与字符编码(推荐)
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
上海网站制作开发公司,上海买房比较好的网站有哪些?
IOS倒计时设置UIButton标题title的抖动问题
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
C++中引用和指针有什么区别?(代码说明)
外贸公司网站制作,外贸网站建设一般有哪些步骤?
html制作网站的步骤有哪些,iapp如何添加网页?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
定制建站流程步骤详解:一站式方案设计与开发指南
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
专业公司网站制作公司,用什么语言做企业网站比较好?
,巨量百应是干嘛的?
如何在Golang中使用replace替换模块_指定本地或远程路径
代刷网站制作软件,别人代刷火车票靠谱吗?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何在Windows虚拟主机上快速搭建网站?
建站之星后台管理如何实现高效配置?
教学网站制作软件,学习*后期制作的网站有哪些?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何在局域网内绑定自建网站域名?
如何通过多用户协作模板快速搭建高效企业网站?
Android自定义listview布局实现上拉加载下拉刷新功能
北京专业网站制作设计师招聘,北京白云观官方网站?
如何在云服务器上快速搭建个人网站?
如何用已有域名快速搭建网站?
如何在阿里云虚拟服务器快速搭建网站?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
深圳网站制作案例,网页的相关名词有哪些?
音乐网站服务器如何优化API响应速度?
网站专业制作公司有哪些,做一个公司网站要多少钱?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何在万网自助建站中设置域名及备案?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
深入理解Android中的xmlns:tools属性
用v-html解决Vue.js渲染中html标签不被解析的问题
如何彻底卸载建站之星软件?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
高防服务器租用首荐平台,企业级优惠套餐快速部署
网站制作服务平台,有什么网站可以发布本地服务信息?
如何在万网开始建站?分步指南解析
*请认真填写需求信息,我们会在24小时内与您取得联系。