原生JavaScript实现瀑布流布局

yizhihongxing

原生Javascript实现瀑布流布局可以分为以下几个步骤:

步骤一:布局基础准备

  • 定义要展示的图片或者内容容器的宽度,以便计算列数和每一列的宽度
  • 获取当前容器中的所有子元素
  • 定义一个数组存放每一列的高度

步骤二:计算列数和每一列的宽度

  • 计算容器的宽度与每个子元素的宽度相除,取整,得到列数
  • 根据列数,计算每一列的宽度,即容器宽度/列数

步骤三:遍历每个子元素,将其加入到最短的一列中

  • 遍历每一个子元素
  • 找到当前所有列中高度最小的一列
  • 将当前子元素放置到高度最小的一列中
  • 更新该列高度值

步骤四:将所有子元素全部布局完毕

  • 遍历所有子元素,设置其定位信息,确定其在瀑布流中的位置

示例如下:

示例一

HTML代码:

<div class="waterfall">
    <img src="1.jpg" alt="">
    <img src="2.jpg" alt="">
    <img src="3.jpg" alt="">
    <img src="4.jpg" alt="">
    <img src="5.jpg" alt="">
</div>

Javascript代码:

const waterfall = document.querySelector('.waterfall');
const cols = 3; // 3列
const colWidth = waterfall.clientWidth / cols; // 每列的宽度
const colHeight = new Array(cols).fill(0); // 每列的高度初始化为0

// 遍历所有子元素
for (let i = 0; i < waterfall.children.length; i++) {
    const item = waterfall.children[i];
    const index = colHeight.indexOf(Math.min(...colHeight)); // 找高度最小的一列
    item.style.left = index * colWidth + 'px';
    item.style.top = colHeight[index] + 'px';
    colHeight[index] += item.clientHeight; // 更新该列高度
}

示例二

HTML代码:

<div class="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>

Javascript代码:

const waterfall = document.querySelector('.waterfall');
const cols = 4; // 4列
const colWidth = waterfall.clientWidth / cols; // 每列的宽度
const colHeight = new Array(cols).fill(0); // 每列的高度初始化为0

// 遍历所有子元素
for (let i = 0; i < waterfall.children.length; i++) {
    const item = waterfall.children[i];
    const index = colHeight.indexOf(Math.min(...colHeight)); // 找高度最小的一列
    item.style.left = index * colWidth + 'px';
    item.style.top = colHeight[index] + 'px';
    colHeight[index] += item.clientHeight; // 更新该列高度
}

这两个示例都是基于固定的列数和容器宽度来实现的,如果想要实现自适应的瀑布流布局,可以在容器宽度变化时重新调用以上代码即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JavaScript实现瀑布流布局 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 通用的二级菜单代码(css+javascript)

    一、CSS部分 菜单样式设置 对于菜单样式设置,可以使用以下 CSS 属性: .menu { list-style: none; /* 去掉默认的贡献,使其显示为列表项形式 */ position: relative; /* 绝对定位父元素,默认隐藏下拉菜单 */ z-index: 1; /* 只有z-index属性是大于等于1,才算浮动在文档流之上 */ …

    css 2023年6月10日
    00
  • 一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子

    下面是一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子的完整攻略。 介绍 随着Web技术的发展,Javascript在Web前端开发中扮演着越来越重要的角色。然而,不同的浏览器(如IE和Firefox等)对Javascript的支持程度不同,会导致一些兼容性问题。本攻略总结了一些常见的Javascript的IE和Firefox…

    css 2023年6月10日
    00
  • HTML的a标签href属性指定相对路径与绝对路径的用法讲解

    我们来详细讲解一下HTML的a标签href属性指定相对路径与绝对路径的用法。 1. 什么是相对路径和绝对路径 在了解a标签的href属性指定相对路径与绝对路径时,我们需要先理解相对路径和绝对路径的概念。 相对路径是相对于当前路径的一种表示方式,例如网站中的页面链接。 绝对路径是从根路径开始的路径表示方式,例如访问文件夹中的某个文件。 2. href属性指定相…

    css 2023年6月10日
    00
  • 在DW8中CSS应用怎么没效果?

    在DW8中CSS应用没效果的原因可能有很多,下面将介绍一些常见的原因以及解决方法。 1. CSS文件路径错误 如果CSS文件的路径错误,那么在DW8中应用CSS就会失败。在DW8中,可以通过以下步骤检查CSS文件路径是否正确: 确认CSS文件是否存在于正确的文件夹中。 确认CSS文件名是否正确。 确认CSS文件路径是否正确。 如果CSS文件路径错误,可以通过…

    css 2023年5月18日
    00
  • JavaScript开发Chrome浏览器扩展程序UI的教程

    想要开发Chrome浏览器扩展程序UI,需要掌握以下几个方面: 1.了解Chrome扩展程序的生命周期及其结构 Chrome浏览器插件主要由四个部分组成:manifest.json、background.js、popup.html和icon。 其中,manifest.json是必须的,这个文件必须放在插件文件夹根目录内。它用来告诉浏览器插件的基本信息,如插件…

    css 2023年6月10日
    00
  • css浮动 float属性详解

    CSS浮动float属性详解 什么是CSS浮动float? CSS浮动(float)是一种布局方式,可以在网页中实现元素的多列布局以及图片与文字环绕等效果。使用浮动属性可以将元素沿着父元素左侧或者右侧移动,直到遇到父元素的边框或其他浮动元素的边框为止。 如何使用CSS浮动float? 在CSS中,我们可以使用float属性来实现浮动布局。其语法如下: sel…

    css 2023年6月10日
    00
  • 避免Smarty与CSS语法冲突的方法

    为了避免Smarty与CSS语法冲突,我们可以采取以下几种方法。 1. 修改Smarty模板定界符 Smarty模板引擎采用{和}作为模板变量的定界符,而在CSS中我们也会使用{和}来定义样式块。因此,为了避免冲突,我们可以修改Smarty模板的左定界符和右定界符。 假设我们将左定界符和右定界符修改为<%和%>,那么我们就可以使用这种方式来定义S…

    css 2023年6月9日
    00
  • JS实现图片局部放大或缩小的方法

    当我们需要展示一张图片,常常需要提供局部放大或缩小的功能,以便用户能够更好地查看细节。下面是实现JavaScript图片局部放大或缩小的方法: 实现方法 实现图片局部放大或缩小的方法有多种,以下是两种示例: 示例1:鼠标悬停局部放大 首先需要在HTML中定义一个图片元素,并设置一个容器元素将其包裹起来。 接下来,我们需要通过JavaScript获取图片和容器…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部