代码片段示列:

<!DOCTYPE html>
<html><head><title>js流布局</title><style>*{margin:0;padding:0;}li{list-style:none;}.list {position: relative;}.list .item{ position: absolute;}.list img{display:block;width:100%;}</style></head><body><div class="warp"><ul class="list" id="list"><li class="item"><img src="./img/1.jpg" />01</li><li class="item"><img src="./img/2.jpg" />02</li><li class="item"><img src="./img/3.jpg" />03</li><li class="item"><img src="./img/4.jpg" />04</li><li class="item"><img src="./img/5.gif" />05</li><li class="item"><img src="./img/6.jpg" />06</li><li class="item"><img src="./img/7.jpg" />07</li><li class="item"><img src="./img/5.gif" />08</li><li class="item"><img src="./img/6.jpg" />09</li><li class="item"><img src="./img/7.jpg" />10</li></ul></div></body>
</html>
<script>function flowObj () {this.ImgList = document.querySelector('#list');this.itemList = document.getElementsByClassName('item');}flowObj.prototype.setCol = function () {// 获取屏幕总宽度var totalWidth = document.clientWidth || document.body.clientWidth;// 计算item宽度var itemWidth = '';// 每行多少张var colImg = '';switch (true) {case totalWidth <= 808:// 显示三张itemWidth = Math.ceil(totalWidth / (colImg = 3));break;case totalWidth > 808 && totalWidth <= 1242:// 显示五张itemWidth = Math.ceil(totalWidth / (colImg = 5));break;case totalWidth > 1242:// 显示七张itemWidth = Math.ceil(totalWidth / (colImg = 7));break;default:break;}// 存高度数组var harr = new Array(colImg+1).join('0').split('');for ( var i = 0; i < this.itemList.length; i++) {var mins = Math.min.apply(null,harr);var bol = true;this.itemList[i].style.width = itemWidth + "px";for (var j = 0; j < harr.length; j++) {// 若有相同高度的最小高度if (harr[j] == mins && bol) {bol = false;// 设置 topthis.itemList[i].style.top = harr[j]+"px";// 设置leftthis.itemList[i].style.left = j * itemWidth + "px";// 赋值heightharr[j] = parseFloat(harr[j]) + this.itemList[i].clientHeight;}}}}var flow = new flowObj();window.onload = function () {flow.setCol();}window.onresize = function () {flow.setCol();}
</script>

1.没有做封装,简单版本

代码片段说明:

建立两个数组

如:harr --> 保存列的高度值,每个值初始化为0,避免下面循环时做为空等判断。

这个列可根据多少屏幕宽度自己自定义吧。

每列展示多少个即可算出每个li.item的宽度,并赋值。

如:this.itemList ---> 展示的li, 这个是操作li的

循环itemList 目的->赋值操作每个列的 left , top 。

left,top从哪里来 --> harr中来。第二行的第一张图要放在第一行的最小那一列的下方, 所以此处要先找harr中的最小高度值,会得到它的索引。left = j * 它的宽度 ,top = harr[j]

每一次循环的找到的最小高度值,要进行‘更新’,需要重新赋予新的高度值(也就是插入进瀑布流图片的高度值)。

总结:

每一张图片 要进行三个操作 :

① 取最小高度值 (图片要放的哪一张图下面)

② 设置left,top值 (根据第一步得到的)

③ 赋值 (更新 harr[],插入的那张图片的高度)

2.有几个需要注意的地方:

① this.itemList[i].style.width = itemWidth + "px";

设置每个li.item的宽度,请在之前就设置好,不然下面获取的clientHeight 不准确 (因为宽高度是img跟里面的内容撑开的,img的宽度是100% ,会等比缩放的。)

② var bol = true;

harr[] 这个数组,用来保存li.item的高度值的,好找最小高度值,考虑到最小高度值可能有一样的,那么取第一个就好,也就是说,找到了直接false即可。

【简易实用】源生js瀑布流示列相关推荐

  1. 原生js瀑布流效果,css+html+js,复制下来可直接使用

    html里面总共需要引入三个文件 css文件两个,js代码一个 :::json文件里面的图片就自己增改把 html页面 <div class="container" id=& ...

  2. 前端 纯源生js 数字流(全代码)

    纯源生js代码 书写数字流 <!DOCTYPE html> <html lang="zh"><head><meta charset=&qu ...

  3. 原声JS瀑布流加延迟加载

    <!doctype html> <html lang="en"> <head><meta charset="UTF-8" ...

  4. 原声JS瀑布流加延迟载入

    <!doctype html> <html lang="en"> <head><meta charset="UTF-8" ...

  5. JS——瀑布流无限加载以及动态生成a标签

    如何实现瀑布流排列效果?看下面这张图 通过js去比较每张图片的高度,然后进行排列. 这是一个模拟的瀑布流的list列表项 <div id="main"><div ...

  6. iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流

    在上一篇博客中<iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流>,自定义瀑布流的列数,Cell的外边距,C ...

  7. 网页瀑布流效果实现的几种方式

    前言 like a mountain that is in our path,wo cannot complain that it is there,we simply have to climb i ...

  8. 堆糖瀑布流完整解决方案(jQuery)

    2010年堆糖创办以来,网站界面经历过3-5次重大改版,logo也曾更换过两次,早期蓝红相间三个圈的logo恐怕很少有人记得了.与此同时,前端 js 框架也在默默的更新换代.最早堆糖上线时,js 采用 ...

  9. 瀑布流插件vue-masonry

    前言 之前其实有分享过一篇纯CSS实现瀑布流的方法: https://oliver.blog.csdn.net/article/details/126450691,但纯CSS实现的方案都不是比较好的方 ...

最新文章

  1. c# 元组Tuple
  2. 微软Print to PDF打印机提示参数错误的解决方法
  3. 在asp.net core中使用的验证框架FluentValidation
  4. syslinux 制作多系统启动U盘
  5. server 2008 mysql 报错 0xc000007b_这十个MySQL经典错误,99%的程序员一定遇到过!你呢?...
  6. 使用基础node.js的express框架在连接数据库的过程中,出现Error: Cannot enqueue Handshake after invoking quit.的解决方案
  7. php发送邮件pop3,php 发送邮件与pop3邮件登录代码
  8. 余子式和余子式 伴随矩阵定义 性质 二阶矩阵求伴随矩阵 伴随矩阵理解(列排)
  9. 开篇-开启全新的.NET现代应用开发体验
  10. windows 没有应用商店,直接安装所需应用的解决方案
  11. 如何完成上传图片到腾讯云
  12. 计算机科学与技术研究生推荐读物,2017年中山大学0812计算机科学与技术考研参考书目推荐...
  13. 设计模式学习之假如你是一个建造者(建造者模式)
  14. 三步完成两张网卡共享上网,区别于移动热点共享上网
  15. 3GPP TS 23501-g51 中英文对照 | 5.3.1 General
  16. 2020年全球及中国术后镇痛药行业市场现状分析,非阿片类药物需求不断增长「图」
  17. python动态捕捉屏幕_如何使用Python实现自动化截取Windows系统屏幕
  18. 汉语言文学研究生C,汉语言文学专业学生考研要考什么科目
  19. 全球首个活体机器人:学会“生娃”,会自我修复,可繁衍四世
  20. 解决ubuntu下crossover中qq中文字体乱码问题

热门文章

  1. 美国华裔二代吐露在美生活真相:出国,请三思而后行
  2. Zcash 不透明(加密)交易的分析
  3. 女程序员转测试 欢迎留言讨论
  4. ZXF20S300磁盘阵列工程指导手册V2[1].00
  5. oracle 授予 sequence,Oracle中的角色和权限授予
  6. android 循环录像功能吗,行车记录仪到底要不要循环录像
  7. 手撕红黑树——C++高阶数据结构详解
  8. 3.24下午 王希伟5.12福利课上完 剑7-95,剑7-98, 剑8-22,剑8-25
  9. 笔记之tomcat映射虚拟路径
  10. linux创建用户张飞,Linux系统操作测试试题 部分