前端js实现瀑布图代码

简介: 前端js实现瀑布图代码

以下是使用原生JavaScript实现瀑布图的代码:

HTML结构:

<div id="waterfall">
  <div class="item">Item 1</div>
  <div class="item">Item 2</div>
  <div class="item">Item 3</div>
  <div class="item">Item 4</div>
  <div class="item">Item 5</div>
  <div class="item">Item 6</div>
  <div class="item">Item 7</div>
  <div class="item">Item 8</div>
  <div class="item">Item 9</div>
  <div class="item">Item 10</div>
  <div class="item">Item 11</div>
  <div class="item">Item 12</div>
</div>

CSS样式:

#waterfall {
  column-count: 3; /* 列数为3 */
  column-gap: 20px; /* 列间距为20px */
}
.item {
  margin-bottom: 20px; /* 每个item的底部间距为20px */
  break-inside: avoid; /* 避免item跨列铺满 */
}

JavaScript代码:

function waterfall() {
  const waterfall = document.getElementById('waterfall'); // 获取瀑布流容器
  const items = waterfall.querySelectorAll('.item'); // 获取所有item
  let cellWidth = items[0].offsetWidth; // 计算item的宽度
  let cellMarginRight = parseInt(window.getComputedStyle(items[0]).marginRight); // 计算item的右边距
  let containerWidth = waterfall.offsetWidth; // 获取容器宽度
  let colNum = parseInt(containerWidth / (cellWidth + cellMarginRight)); // 计算出列数
  let colHeight = new Array(colNum).fill(0); // 创建一个长度为列数的数组,用于存储每列的高度
  for (let i = 0; i < items.length; i++) {
    let item = items[i];
    let minHeight = Math.min(...colHeight); // 获取最小高度的列
    let minIndex = colHeight.indexOf(minHeight); // 获取最小高度的列的索引
    item.style.position = 'absolute'; // 设置item为绝对定位
    item.style.left = minIndex * (cellWidth + cellMarginRight) + 'px'; // 计算item的left值
    item.style.top = colHeight[minIndex] + 'px'; // 计算item的top值
    colHeight[minIndex] += item.offsetHeight + cellMarginRight; // 更新当前列的高度
    waterfall.style.height = Math.max(...colHeight) + 'px'; // 更新瀑布流容器的高度
  }
}
// 监听窗口变化,重新计算瀑布流
window.onresize = function() {
  waterfall();
}
// 页面加载时计算瀑布流
window.onload = function() {
  waterfall();
}

以上代码实现了一个简单的瀑布流布局,当窗口大小改变时,会重新计算瀑布流的布局。你可以根据自己的需求调整样式和JavaScript代码。


目录
相关文章
|
1月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
1月前
|
缓存 前端开发 JavaScript
利用代码分割优化前端性能:策略与实践
在现代Web开发中,代码分割是提升页面加载性能的有效手段。本文介绍代码分割的概念、重要性及其实现策略,包括动态导入、路由分割等方法,并探讨在React、Vue、Angular等前端框架中的具体应用。
|
26天前
|
JavaScript 前端开发 测试技术
在 golang 中执行 javascript 代码的方案详解
本文介绍了在 Golang 中执行 JavaScript 代码的四种方法:使用 `otto` 和 `goja` 嵌入式 JavaScript 引擎、通过 `os/exec` 调用 Node.js 外部进程以及使用 WebView 嵌入浏览器。每种方法都有其适用场景,如嵌入简单脚本、运行复杂 Node.js 脚本或在桌面应用中显示 Web 内容。
61 15
在 golang 中执行 javascript 代码的方案详解
|
1月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
27天前
|
缓存 监控 前端开发
探索前端性能优化:关键策略与代码实例
本文深入探讨前端性能优化的关键策略,结合实际代码示例,帮助开发者提升网页加载速度和用户体验,涵盖资源压缩、懒加载、缓存机制等技术。
|
1月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
50 5
|
1月前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
75 1
|
1月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
52 4
|
1月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
1月前
|
缓存 监控 前端开发
前端性能优化:从代码到部署的全面策略
前端性能优化:从代码到部署的全面策略