当前位置:首页 > JavaScript

js 瀑布流实现

2026-03-01 01:27:30JavaScript

瀑布流实现方法

瀑布流(Masonry Layout)是一种常见的网页布局方式,元素按照高度自适应排列,形成类似瀑布的效果。以下是几种实现瀑布流的方法:

使用纯 CSS 实现

CSS Grid 或 Flexbox 可以简单实现瀑布流效果,但需要固定列数。

js 瀑布流实现

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: 10px;
}

.item {
  break-inside: avoid;
}

使用 JavaScript 动态计算

动态计算元素位置,实现更灵活的瀑布流布局。

js 瀑布流实现

function masonryLayout(containerSelector, itemSelector, columns) {
  const container = document.querySelector(containerSelector);
  const items = document.querySelectorAll(itemSelector);
  const containerWidth = container.offsetWidth;
  const columnWidth = containerWidth / columns;
  const heights = Array(columns).fill(0);

  items.forEach(item => {
    const minHeight = Math.min(...heights);
    const columnIndex = heights.indexOf(minHeight);
    item.style.position = 'absolute';
    item.style.width = `${columnWidth}px`;
    item.style.left = `${columnIndex * columnWidth}px`;
    item.style.top = `${minHeight}px`;
    heights[columnIndex] += item.offsetHeight;
  });

  container.style.height = `${Math.max(...heights)}px`;
}

window.addEventListener('load', () => masonryLayout('.container', '.item', 3));
window.addEventListener('resize', () => masonryLayout('.container', '.item', 3));

使用第三方库

现有成熟的库可以快速实现瀑布流,如 Masonry.js 或 Isotope。

<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script>
<script>
  var elem = document.querySelector('.container');
  var msnry = new Masonry(elem, {
    itemSelector: '.item',
    columnWidth: 200,
    gutter: 10
  });
</script>

响应式瀑布流

结合媒体查询实现响应式布局,根据屏幕宽度调整列数。

function getColumns() {
  if (window.innerWidth < 768) return 2;
  if (window.innerWidth < 1024) return 3;
  return 4;
}

window.addEventListener('resize', () => {
  masonryLayout('.container', '.item', getColumns());
});

注意事项

  • 图片加载可能影响高度计算,需确保图片加载完成后再布局。
  • 动态添加内容时需重新计算布局。
  • 性能优化:可使用防抖(debounce)减少 resize 事件的频繁触发。

以上方法可根据项目需求选择,纯 CSS 适合简单场景,JavaScript 实现更灵活,第三方库适合快速开发。

标签: 瀑布js
分享给朋友:

相关文章

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…