首先实现滚动要借助onscroll事件处理程序。

无穷滚动就是滑动滚动条,实现数据块的无穷加载。
我们以瀑布流的布局来实现无穷加载。瀑布流就是一些等宽不等高的数据块布局。在滚动条下拉时,它会进行加载。那么问题就是在判断什么时候应该加载。
我们首先应该明白瀑布流布局的特点。它将下一个图片总是放在当前列数最低的那一列。所以当加载最后一个蓝色的图片时,也就无疑是最后一个图片了。所以要判断该图片加载到什么程度来触发滚动事件。
图上灰色的表示页面的大小,后面蓝色边框表示窗口的大小。当拖动滚动条时,灰色部分上移。我们希望页面最后一个图片(蓝色图片)加载一半时触发滚动事件。那么就要形成参照。
下来写代码:
//检测是否具备滚动条加载数据块的条件
function checkScrollSlide(){
var oparent = document.getElementById('main');
var oBoxs = getByClass(oparent,'box');
var scrollH = document.body.scrollTop || document.documentElement.scrollTop + document.body.clientHeight || document.documentElement.clientHeight;
var lastBoxH = oBoxs[oBoxs.length - 1].offsetTop + Math.floor(oBoxs[oBoxs.length - 1].offsetHeight/2);
return (lastBoxH < scrollH )? true : false;
}
getClass是根据类名查找元素集合的自己写的函数,待会儿会附上源码
我们要进行加载的数据块的格式是这样的.每个图片被一个class= pic的div包裹。最后整体属于父元素main
<div id = "main"> <div class = "box"> <div class = "pic"> <img src = "images/0.jpg"> </div> </div> <div class = "box"> <div class = "pic"> <img src = "images/1.jpg"> </div> </div> <div class = "box"> <div class = "pic"> <img src = "images/2.jpg"> </div> </div> <div>
首先我们要加载的数据块应该是从后台传过来的,在这里我们用json模拟一下就可以:
var DataIn = {"data":[{"src":'0.jpg'},{"src":'1.jpg'},{"src":'2.jpg'},{"src":'3.jpg'},{"src":'4.jpg'},{"src":'5.jpg'}]};
比如这个就是后台传过来的数据。
上面的函数返回一个布尔值,当为true时,触发滚动事件。
window.onscroll = function(){
var oparent = document.getElementById('main');
//当满足加载条件时,就要向页面中加载数据块
if(checkScrollSlide){
for(var i = 0; i< DataIn.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 = './images/'+DataIn.data[i].src;
opic.appendChild(oImg);
}
waterFull('main','box');
}
}
}
附上源码:
css和html
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8" />
<script src = "./jswaterfll.js"></script>
<title>瀑布流布局</title>
<style type="text/css">
*{
padding: 0px;
margin: 0px;
}
#main{
position: relative;
}
.box{
/* display: inline-block;*/
padding: 15px 0px 0px 15px;
float: left;
}
.pic{
padding: 10px;
border-radius: 5px;
border:1px solid #ccc;
box-shadow: 0 0 5px #ccc;
}
.pic img{
width: 165px;
height: auto;
}
</style>
</head>
<body>
<div id = 'main'>
<div class = "box">
<div class = "pic">
<img src = "images/3.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/4.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/20.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/21.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/2.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/3.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/4.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/5.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/6.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/7.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/8.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/9.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/10.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/11.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/17.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/18.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/19.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/4.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/5.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/6.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/7.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/8.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/11.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/12.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/13.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/14.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/15.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/16.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/17.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/18.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/19.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/20.jpg">
</div>
</div>
<div class = "box">
<div class = "pic">
<img src = "images/21.jpg">
</div>
</div>
</div>
</body>
</html>
js代码:
window.onload = function(){
waterFull('main','box');
var DataIn = {"data":[{"src":'0.jpg'},{"src":'1.jpg'},{"src":'2.jpg'},{"src":'3.jpg'},{"src":'4.jpg'},{"src":'5.jpg'}]};
window.onscroll = function(){
var oparent = document.getElementById('main');
if(checkScrollSlide){
for(var i = 0; i< DataIn.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 = './images/'+DataIn.data[i].src;
opic.appendChild(oImg);
}
waterFull('main','box');
}
}
}
function waterFull(parent,children){
var oParent = document.getElementById(parent);
//var oBoxs = parent.querySelectorAll(".box");
var oBoxs = getByClass(oParent,children);
//计算整个页面显示的列数
var oBoxW = oBoxs[0].offsetWidth;
var cols = Math.floor(document.documentElement.clientWidth/oBoxW);
//设置main的宽度,并且居中
oParent.style.cssText = 'width:'+oBoxW * cols +'px; margin: 0 auto';
//找出高度最小的图片,将下一个图片放在下面
//定义一个数组,存放每一列的高度,初始化存的是第一行的所有列的高度
var arrH = [];
for(var i = 0; i< oBoxs.length ; i++){
if(i < cols){
arrH.push(oBoxs[i].offsetHeight);
}
else{
var minH = Math.min.apply(null,arrH);
var minIndex = getMinhIndex(arrH,minH);
oBoxs[i].style.position = 'absolute';
oBoxs[i].style.top= minH + 'px';
//oBoxs[i].style.left = minIndex * oBoxW + 'px';
oBoxs[i].style.left = oBoxs[minIndex].offsetLeft+'px';
arrH[minIndex] += oBoxs[i].offsetHeight;
}
}
}
function getByClass(parent,className){
var boxArr = new Array();//用来获取所有class为box的元素
oElement = parent.getElementsByTagName('*');
for (var i = 0; i <oElement.length; i++) {
if(oElement[i].className == className){
boxArr.push(oElement[i]);
}
};
return boxArr;
}
//获取当前最小值得下标
function getMinhIndex(array,min){
for(var i in array){
if(array[i] == min)
return i;
}
}
//检测是否具备滚动条加载数据块的条件
function checkScrollSlide(){
var oparent = document.getElementById('main');
var oBoxs = getByClass(oparent,'box');
var scrollH = document.body.scrollTop || document.documentElement.scrollTop + document.body.clientHeight || document.documentElement.clientHeight;
var lastBoxH = oBoxs[oBoxs.length - 1].offsetTop + Math.floor(oBoxs[oBoxs.length - 1].offsetHeight/2);
return (lastBoxH < scrollH )? true : false;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js无穷滚动加载数据
# js滚动加载数据
# js加载数据
# 当滚动条滚动到页面底部自动加载增加内容的js代码
# js实现滚动条滚动到页面底部继续加载
# 基于AngularJS实现页面滚动到底自动加载数据的功能
# JavaScript实现页面滚动图片加载(仿lazyload效果)
# 滑轮滚动到页面底部ajax加载数据配合jsonp实现探讨
# 原生Js页面滚动延迟加载图片实现原理及过程
# JS图片根据鼠标滚动延时加载的实例代码
# Angularjs 滚动加载更多数据
# 使用jQuery或者原生js实现鼠标滚动加载页面新数据
# AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
# 加载
# 滚动条
# 放在
# 的是
# 在这里
# 也就
# 是这样
# 什么时候
# 是从
# 拖动
# 它会
# 来实现
# 要向
# 它将
# 大家多多
# 就可以
# 来写
# 图上
# 等高
# 当为
相关文章:
表情包在线制作网站免费,表情包怎么弄?
如何挑选最适合建站的高性能VPS主机?
5种Android数据存储方式汇总
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
宝塔建站助手安装配置与建站模板使用全流程解析
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
c# 在ASP.NET Core中管理和取消后台任务
微信小程序 五星评分(包括半颗星评分)实例代码
Python lxml的etree和ElementTree有什么区别
,如何利用word制作宣传手册?
安云自助建站系统如何快速提升SEO排名?
如何选择靠谱的建站公司加盟品牌?
如何选择最佳自助建站系统?快速指南解析优劣
C++如何使用std::optional?(处理可选值)
高防服务器租用如何选择配置与防御等级?
宿州网站制作公司兴策,安徽省低保查询网站?
如何选择高效可靠的多用户建站源码资源?
,巨量百应是干嘛的?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何通过远程VPS快速搭建个人网站?
南平网站制作公司,2025年南平市事业单位报名时间?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
招贴海报怎么做,什么是海报招贴?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
,怎么在广州志愿者网站注册?
高防服务器租用指南:配置选择与快速部署攻略
制作网站的公司有哪些,做一个公司网站要多少钱?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何选择高效便捷的WAP商城建站系统?
如何正确下载安装西数主机建站助手?
如何用免费手机建站系统零基础打造专业网站?
建站之星在线版空间:自助建站+智能模板一键生成方案
制作企业网站建设方案,怎样建设一个公司网站?
高防服务器租用首荐平台,企业级优惠套餐快速部署
电商平台网站制作流程,电商网站如何制作?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
山东云建站价格为何差异显著?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
临沂网站制作公司有哪些,临沂第四中学官网?
完全自定义免费建站平台:主题模板在线生成一站式服务
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
淘宝制作网站有哪些,淘宝网官网主页?
,制作一个手机app网站要多少钱?
如何通过二级域名建站提升品牌影响力?
如何高效配置香港服务器实现快速建站?
如何在阿里云服务器自主搭建网站?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
如何零基础在云服务器搭建WordPress站点?
*请认真填写需求信息,我们会在24小时内与您取得联系。