原生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中的继承性,特殊性,层叠性和重要性

    浅谈CSS中的继承性、特殊性、层叠性和重要性攻略 继承性 在CSS中,当某个元素没有设置特定的属性时,它会从其父元素中继承该属性。这种继承称为CSS的“继承性”。CSS属性根据其继承性可以分为两类: 可以继承的属性,如color、font-size、text-indent等; 不可继承的属性,如border、margin、padding等。 所有可继承的属性…

    css 2023年6月10日
    00
  • Flex 关于字体的应用示例介绍

    下面是详细讲解 “Flex 关于字体的应用示例介绍”的完整攻略。 Flex 关于字体的应用示例介绍 前言 在前端开发中,字体的应用非常重要,能直接影响网站的呈现效果。在 Flex 容器中,一些针对字体的属性可以用来简化字体的应用。 flex-direction flex-direction 是设置 Flex 容器内的子元素排列方向的属性,其默认值是 row,…

    css 2023年6月9日
    00
  • JavaScript canvas实现围绕旋转动画

    下面是详细讲解“JavaScript canvas实现围绕旋转动画”的完整攻略。 准备工作 在开始之前,需要做一些准备工作: 安装最新版本的浏览器,推荐使用Chrome或FireFox浏览器; 熟悉JavaScript语言基础知识; 熟悉canvas API基础知识。 创建canvas环境 首先,在HTML中创建一个canvas元素,并赋予宽高属性,同时为其…

    css 2023年6月10日
    00
  • 动态的样式语言less语法详解之变量与extend

    动态的样式语言less语法详解之变量与extend 简介 LESS是一种动态的样式语言,不仅语法简洁明了,而且扩展性强,利用LESS我们能够更方便、更快捷地写出复杂的样式代码,提升我们的开发效率。 本文将介绍LESS语法中涉及的变量(Variables)与扩展(Extend)。 变量(Variables) LESS中的变量与Javascript中的变量有些相…

    css 2023年6月9日
    00
  • vue修改Element的el-table样式的4种方法

    欢迎阅读我的分享!这里是关于vue修改Element的el-table样式的4种方法的详细讲解。 1. 修改scoped样式 我们可以在vue组件中通过<style scoped>标签修改组件样式。 <template> <div> <el-table :data="tableData" styl…

    css 2023年6月10日
    00
  • jQuery过滤选择器经典应用

    接下来我将详细讲解“jQuery过滤选择器经典应用”的完整攻略。 一、什么是jQuery过滤选择器 jQuery过滤选择器是指根据一定的条件对HTML元素进行过滤筛选,最终获得需要的元素。过滤选择器一般用于从匹配元素集合中筛选出符合特定条件的元素,可以帮助我们更快地定位需要的元素,提高代码效率。 常用的jQuery过滤选择器有以下几种: 过滤选择器 说明 :…

    css 2023年6月10日
    00
  • jQuery toggle()设置CSS样式

    jQuery的toggle()方法可以用于切换样式、元素的显示与隐藏等操作。下面将详细讲解如何利用toggle()方法设置CSS样式。 toggle()方法基础使用 toggle()方法用于切换元素的可见性,被选元素隐藏就显示,被选元素显示就隐藏。 $("button").click(function(){ $("p"…

    css 2023年6月10日
    00
  • 如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度

    让我来详细讲解一下如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度的攻略。 问题描述 在HTML中,pre元素和textarea元素都是常用于显示文本的元素。但是,它们在默认情况下都会出现滚动条,如果文本内容过长会导致页面布局不够美观。所以,我们需要去掉它们的滚动条,并让它们自动换行、自适应文本内容高度。 解决方法 去掉滚动条…

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