原生JavaScript实现瀑布流布局

原生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 :visited伪类选择器隐秘往事回忆录

    当我们在网站中使用超链接时,通常会出现一种需求:为点击过的链接提供视觉上的不同样式,以帮助用户明确区分哪些页面已经访问过。 实现这个效果的一种方式就是使用CSS中的:visited伪类选择器。简单来说,:visited选择器可以帮助我们选中已被访问过的链接,以便我们能够对这些链接应用特定的样式。 下面是一份“CSS :visited伪类选择器隐秘往事回忆录”…

    css 2023年6月9日
    00
  • JavaScript 读取元素的CSS信息的代码

    要读取元素的CSS信息,需要使用JavaScript中的DOM(文档对象模型)方法来获取元素,然后再使用元素对象的属性或方法来读取CSS信息。下面是具体的攻略: 1. 获取元素对象 要获取元素对象,可以使用以下DOM方法: var element = document.getElementById(‘elementId’); 其中,’elementId’是要…

    css 2023年6月10日
    00
  • 原生js实现简单轮播图

    下面是原生JS实现简单轮播图的完整攻略。 1. 准备工作 在HTML文件中,需要定义一个容器作为轮播图的父元素,同时在其中添加轮播图片的子元素。例如,在以下代码中,容器的ID为slider,共有3张轮播图片。 <div id="slider"> <img src="1.jpg" alt="i…

    css 2023年6月10日
    00
  • CSS设置列表样式和创建导航菜单实现代码

    下面是“CSS设置列表样式和创建导航菜单实现代码”的完整攻略。 CSS设置列表样式 当我们需要在页面中使用列表时,我们可以通过CSS来设置不同样式的列表,以提高页面的可读性和美观性。下面是两个示例: 1. 设置无序列表(ul)的样式 ul { list-style: none; /* 去除默认样式 */ padding: 0; margin: 0; } ul…

    css 2023年6月10日
    00
  • Vue + Scss 动态切换主题颜色实现换肤的示例代码

    让我为您讲解一下“Vue + Scss 动态切换主题颜色实现换肤”的完整攻略。 简介 在现代网站和应用程序中,换肤功能成为了一个非常受欢迎的功能,不同的用户可以根据自己的口味和喜好选择自己喜欢的主题、配色和样式。本篇攻略将介绍如何使用Vue和SCSS实现动态切换主题颜色。 准备工作 在开始之前,我们需要安装和配置一些相关的软件包,包括: Node.js和np…

    css 2023年6月9日
    00
  • 实现动画效果核心方式的js代码

    实现动画效果的核心方式之一是使用JavaScript代码对DOM元素进行操作,以下是实现动画效果的代码具体步骤: 获取需要操作的DOM元素,可以使用document.querySelector或document.getElementById方法。 使用JavaScript设置元素的初始状态,例如设置元素的位置、大小、不透明度等属性。注意:需要先设置元素的初始…

    css 2023年6月10日
    00
  • 详解CSS3浏览器兼容

    详解CSS3浏览器兼容的完整攻略 什么是CSS3浏览器兼容问题? CSS3作为CSS的更新版本,引入了众多新特性,如圆角、阴影、变形等,但这些新特性并非所有浏览器都兼容。因此,在开发中,经常会遇到CSS3属性在不同浏览器下显示效果的差异,这就是CSS3浏览器兼容问题。 如何解决CSS3浏览器兼容问题? 1. 使用厂商前缀(Vendor Prefix) CSS…

    css 2023年6月9日
    00
  • JavaScript限定范围拖拽及自定义滚动条应用(3)

    “JavaScript限定范围拖拽及自定义滚动条应用(3)”是一篇关于使用JavaScript实现定制化拖拽和滚动条功能的文章。该文章的主要内容包括以下几个部分: 一、示例背景及需求 文章先简单介绍了一个实际应用场景:一个网页包含多个列表,每个列表内有多个卡片,需要实现拖拽排序和自定义滚动条的功能。 二、代码实现步骤 实现拖拽排序功能 给每个卡片绑定mous…

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