纯js实现瀑布流布局及ajax动态新增数据
本文介绍了如何使用纯JavaScript实现瀑布流网页布局,并模拟了ajax动态加载新数据的功能。以下是详细的实现步骤和思路。
一、初始化布局
需要设置html结构,包括一个包含图片的容器和多个图片盒子。然后,在页面加载完成后,对所有图片进行初始化定位。根据图片的固定宽度和容器的宽度,计算出每行能容纳的图片数量,并据此设置页面的居中布局。接着,通过float属性将前几张图片默认布局为第一行,并将它们的高度存储在一个数组中。之后,逐个添加剩余的图片,将它们放置到当前行中最矮的盒子下方,并更新对应的高度值。这样,就完成了瀑布流布局的初始化。
二、实时监测滚动高度,判断是否要加载新数据
在页面初始化完成后,获取最底部图片距离顶部的高度。然后,通过监听window的滚动事件,实时监测页面的滚动高度和视窗高度。当页面滚动到底部时,通过ajax获取新增图片的json数据。
三. 页面底部新增内容
当获取到新的图片数据后,先创建一个新的图片容器,将其添加到页面底部。然后,将json数据中的图片信息添加到该容器中。所有新增图片添加完成后,需要重新执行布局初始化的操作,以确保新添加的图片能够正确地融入到瀑布流布局中。
需要注意的是,本文介绍的程序存在一些缺点和改进点。例如,程序不是响应式的,不能实时调整页面宽度;在新增ajax模拟数据图片后,会将整个页面的所有图片重新定位一次,这可能会导致性能问题;程序是等所有图片加载完成后再读取图片的尺寸,这在实际应用中可能不可行;在实际项目中,应该由后台程序给出图片尺寸值,在js代码中直接使用图片的width属性。
项目文件夹中的瀑布流展示
这是一个包含预先置入部分图片数据的HTML项目。
HTML部分代码如下:
...(此处省略未改变的HTML代码)
CSS样式表(style.css):
```css
/ 重置浏览器默认样式 /
body, h1, p { margin: 0; padding: 0; }
/ 设置容器相对定位 /
container { position: relative; }
/ 设置box的样式,包括内边距、浮动等 /
.box { padding: 5px; float: left; }
/ 设置box_img的样式,包括内边距、边框、阴影等 /
.box_img { padding: 5px; border: 1px solid c; box-shadow: 0 0 5px c; border-radius: 5px; }
/ 设置图片的宽度和高度 /
.box_img img { width: 150px; height: auto; }
```
JavaScript部分(app.js):
```javascript
window.onload = function() {
// 图片定位函数,传入父元素和子元素名称作为参数
imgLocation("container", "box");
// 模拟的ajax数据,包含图片路径信息
var imgData = { / 数据内容省略 / }; // 此处应包含真实的图片路径数据数组
// 当滚动到页面底部时加载新数据
window.onscroll = function() {
if (checkFlag()) { // 判断是否到达底部加载新数据逻辑的实现开始省略了,这里应该是代码的关键部分,需要根据实际需求进行编写。在编写时,请确保逻辑正确并考虑性能和用户体验等因素。注意在加载新数据时更新imgData的内容。当数据加载完毕后再次调用imgLocation函数重新定位图片。具体的实现方式需要根据您的需求和后端提供的接口进行调整。以下是继续的JavaScript代码:/ 接下来是继续的JavaScript代码:"; var cparent = document.getElementById("container"); // 获取容器元素 var ontent = getChildElement(cparent, "box"); // 获取所有的box元素 for (var i = 0; i < imgData.data.length; i++) { var newBox = document.createElement("div"); newBox.className = "box"; cparent.appendChild(newBox); var newImg = document.createElement("img"); newImg.src = "img/" + imgData.data[i].src; newBox.appendChild(newImg); } // 重新定位所有图片 imgLocation("container", "box"); } }; // 检查是否到达页面底部 function checkFlag() { var cparent = document.getElementById("container"); var ontent = getChildElement(cparent, "box"); // 获取最后一张图片距离顶部的位置 var lastContentHeight = ontent[ontent.length - 1].offsetTop; // 获取滚动条的位置 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; // 获取浏览器窗口的高度 var pageHeight = document.documentElement.clientHeight || document.body.clientHeight; // 判断是否到达底部 if (lastContentHeight < scrollTop + pageHeight) { return true; } else { return false; } } // 图片定位函数 function imgLocation(parent, content) { var cparent = document.getElementById(parent); var ontent = getChildElement(cparent, content); // 获取图片的宽度和窗口宽度 var imgWidth = ontent[0].offsetWidth; var windowWidth = document.documentElement.clientWidth; // 计算每行图片的数量 var num = Math.floor(windowWidth / imgWidth); // 设置容器的宽度 cparent.style.width = num imgWidth + "px"; cparent.style.margin = "0 auto"; // 根据高度排序将图片定位到正确的位置 var BoxHeightArr = []; for (var i = 0; i < ontent.length; i++) { if (i < num) { BoxHeightArr[i] = ontent[i].offsetHeight; ontent[i].style.position = "static"; } else { var minHeight = Math.min(...BoxHeightArr); var minIndex = getminheightLocation(BoxHeightArr, minHeight); ontent[i].style.position = "absolute"; ontent[i].style.top = minHeight + "px"; ontent[i].style.left = ontent[minIndex].offsetLeft + "px"; BoxHeightArr[minIndex] += ontent[i].offsetHeight; } } }; // 获取最小高度的索引函数 function getminheightLocation(BoxHeightArr, minHeight) { for (var i in BoxHeightArr) { if (BoxHeightArr[i] == minHeight) { return i; } } } // 获取指定元素的子元素函数 function getChildElement神秘的“寒武纪”——时间的见证者“寒武纪”生命的诞生和繁衍之路被精心呈现了出来。在这段漫长而又精彩的旅程中,我们见证了生命从无到有、从简单到复杂、从低级到高级的演变过程。此刻,让我们跟随时间的脚步,一起走进这个充满奇迹的世界。
寒武纪时代,生命的画卷正在悄然展开。这是一个充满神秘色彩的时代,各种生物在这片广袤的大地上逐渐崭露头角。这里充满了未知的奇迹,充满了无限的想象力。每一种生物的出现都是对生命的肯定,每一次演变都是对生命的赞美。它们以自己的方式,向世界展示着生命的顽强和坚韧。
随着时间的推移,寒武纪的生物逐渐发展出了各种各样的形态和特征。这些生物有的善于游泳,有的善于潜沙,有的善于攀爬。它们在不同的环境中生存和繁衍,共同构成了寒武纪的生命图谱。这些生物的演变过程不仅展示了生命的多样性,也揭示了生命的适应性和创造力。它们以自己的方式,向世界展示着生命的智慧和力量。
在这个时代里,我们见证了生命的奇迹和壮丽。我们看到了生命在极端环境下的顽强生存和顽强拼搏的精神。我们看到了生命在适应环境的过程中所展现出的智慧和勇气。我们看到了生命在繁衍过程中所展现出的无私和奉献。这些都是生命的真谛,都是值得我们尊重和学习的品质。
在这个寒武纪的世界里,我们看到了生命的美好和希望。这里充满了生命的活力和生机,充满了生命的力量和勇气。让我们感受到生命的力量和美好,让我们更加珍惜和尊重生命。我们也应该意识到保护自然环境的重要性,保护这个美丽的星球是我们共同的责任。让我们携手共进,共同创造一个更加美好的未来!
平面设计师
- 纯js实现瀑布流布局及ajax动态新增数据
- 高级MySQL数据库面试问题 附答案
- 分享3个php获取日历的函数
- JQuery+Ajax实现数据查询、排序和分页功能
- Angular使用ng-messages与PHP进行表单数据验证
- Laravel框架处理用户的请求操作详解
- react-native封装插件swiper的使用方法
- nodejs实现OAuth2.0授权服务认证
- MySQL存储引擎基础知识
- ASP.NET MVC4入门教程(七):给电影表和模型添加
- asp.net实现取消页面表单内文本输入框Enter响应的
- Thinkphp5.0框架的Db操作实例分析【连接、增删改查
- 使用element-ui的el-menu导航选中后刷新页面保持当前
- C# 递归函数详细介绍及使用方法
- 微信小程序template模板与component组件的区别和使用
- Laravel5.4框架中视图共享数据的方法详解