当前位置: 首页 > news >正文

11. 瀑布流布局

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>11.瀑布流布局</title><style>#container {position: relative;}img {position: absolute;}</style></head><body><div id="container"></div></body><script>var divContainer = document.getElementById('container')var imgWidth = 220 //每张图片的固定宽度//1. 加入图片元素function createImgs() {for (var i = 0; i <= 40; i++) {var height = Math.ceil(Math.random() * 100 + 200)var src = 'https://picsum.photos/220/' + height //生成图片的src路径var img = document.createElement('img')img.onload = setPoisionsimg.src = src //设置src路径divContainer.appendChild(img) //添加到容器中}}createImgs()// 2. 设置每张图片的位置function setPoisions() {/*** 计算一共有多少列,以及每一列之间的间隙*/function cal() {var containerWidth = divContainer.clientWidth //容器的宽度//计算列的数量var columns = Math.floor(containerWidth / imgWidth)//计算间隙var spaceNumber = columns + 1 //间隙数量var leftSpace = containerWidth - columns * imgWidth //计算剩余的空间var space = leftSpace / spaceNumber //每个间隙的空间return {space: space,columns: columns,}}var info = cal() //得到列数,和 间隙的空间var nextTops = new Array(info.columns) //该数组的长度为列数,每一项表示该列的下一个图片的纵坐标nextTops.fill(0) //将数组的每一项填充为0for (var i = 0; i < divContainer.children.length; i++) {var img = divContainer.children[i]//找到nextTops中的最小值作为当前图片的纵坐标var minTop = Math.min.apply(null, nextTops)img.style.top = minTop + 'px'//重新设置数组这一项的下一个top值var index = nextTops.indexOf(minTop) //得到使用的是第几列的top值nextTops[index] += img.height + info.space//横坐标var left = (index + 1) * info.space + index * imgWidthimg.style.left = left + 'px'}var max = Math.max.apply(null, nextTops) //求最大值divContainer.style.height = max + 'px' //3. 设置容器的高度}var timerId = null //一个计时器的idwindow.onresize = function () {//窗口尺寸变动后,重新排列if (timerId) {clearTimeout(timerId)}timerId = setTimeout(setPoisions, 300)}</script>
</html>
http://www.lryc.cn/news/332306.html

相关文章:

  • Flutter-发布插件到pub上传不上问题
  • Windows 2008虚拟机安装、安装VM Tools、快照和链接克隆、添加硬盘修改格式为GPT
  • c++的学习之路:12、vector(1)
  • 2024.2.17力扣每日一题——N叉树的层序遍历
  • 滑动窗口(尺取法/Python)
  • 【打印SQL执行日志】⭐️Mybatis-Plus通过配置在控制台打印执行日志
  • Vue后台管理系统常用组件的优缺点分析
  • 栈的应用——用栈实现算数混合运算表达式的计算
  • 动态规划—机器人移动问题(Java)
  • 第十一届蓝桥杯物联网试题(省赛)
  • 【Python基础教程】5. 数
  • Qt中出现中文乱码的原因以及解决方法
  • Linux 文件相关命令
  • K8S Deployment 简介, 1个简单的Kubernetes Deployment YAML 文件
  • win11安装WSL UbuntuTLS
  • 第十题:金币
  • Windows 11 中Docker的安装教程
  • 纯C代码模板
  • 二、GitLab相关操作
  • 【详细注释+流程讲解】基于深度学习的文本分类 TextCNN
  • Day.21
  • Spring-IoC 基于注解
  • Spring声明式事务以及事务传播行为
  • 【C语言数据库】Sqlite3基础介绍
  • el-upload上传图片图片、el-load默认图片重新上传、el-upload初始化图片、el-upload编辑时回显图片
  • 【拓扑空间】示例及详解1
  • linux安装jdk8
  • Spring重点知识(个人整理笔记)
  • HTML基础知识详解(上)(如何想知道html的全部基础知识点,那么只看这一篇就足够了!)
  • 如何借助Idea创建多模块的SpringBoot项目