【简易实用】源生js瀑布流示列
代码片段示列:
<!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瀑布流示列相关推荐
- 原生js瀑布流效果,css+html+js,复制下来可直接使用
html里面总共需要引入三个文件 css文件两个,js代码一个 :::json文件里面的图片就自己增改把 html页面 <div class="container" id=& ...
- 前端 纯源生js 数字流(全代码)
纯源生js代码 书写数字流 <!DOCTYPE html> <html lang="zh"><head><meta charset=&qu ...
- 原声JS瀑布流加延迟加载
<!doctype html> <html lang="en"> <head><meta charset="UTF-8" ...
- 原声JS瀑布流加延迟载入
<!doctype html> <html lang="en"> <head><meta charset="UTF-8" ...
- JS——瀑布流无限加载以及动态生成a标签
如何实现瀑布流排列效果?看下面这张图 通过js去比较每张图片的高度,然后进行排列. 这是一个模拟的瀑布流的list列表项 <div id="main"><div ...
- iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流
在上一篇博客中<iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流>,自定义瀑布流的列数,Cell的外边距,C ...
- 网页瀑布流效果实现的几种方式
前言 like a mountain that is in our path,wo cannot complain that it is there,we simply have to climb i ...
- 堆糖瀑布流完整解决方案(jQuery)
2010年堆糖创办以来,网站界面经历过3-5次重大改版,logo也曾更换过两次,早期蓝红相间三个圈的logo恐怕很少有人记得了.与此同时,前端 js 框架也在默默的更新换代.最早堆糖上线时,js 采用 ...
- 瀑布流插件vue-masonry
前言 之前其实有分享过一篇纯CSS实现瀑布流的方法: https://oliver.blog.csdn.net/article/details/126450691,但纯CSS实现的方案都不是比较好的方 ...
最新文章
- c# 元组Tuple
- 微软Print to PDF打印机提示参数错误的解决方法
- 在asp.net core中使用的验证框架FluentValidation
- syslinux 制作多系统启动U盘
- server 2008 mysql 报错 0xc000007b_这十个MySQL经典错误,99%的程序员一定遇到过!你呢?...
- 使用基础node.js的express框架在连接数据库的过程中,出现Error: Cannot enqueue Handshake after invoking quit.的解决方案
- php发送邮件pop3,php 发送邮件与pop3邮件登录代码
- 余子式和余子式 伴随矩阵定义 性质 二阶矩阵求伴随矩阵 伴随矩阵理解(列排)
- 开篇-开启全新的.NET现代应用开发体验
- windows 没有应用商店,直接安装所需应用的解决方案
- 如何完成上传图片到腾讯云
- 计算机科学与技术研究生推荐读物,2017年中山大学0812计算机科学与技术考研参考书目推荐...
- 设计模式学习之假如你是一个建造者(建造者模式)
- 三步完成两张网卡共享上网,区别于移动热点共享上网
- 3GPP TS 23501-g51 中英文对照 | 5.3.1 General
- 2020年全球及中国术后镇痛药行业市场现状分析,非阿片类药物需求不断增长「图」
- python动态捕捉屏幕_如何使用Python实现自动化截取Windows系统屏幕
- 汉语言文学研究生C,汉语言文学专业学生考研要考什么科目
- 全球首个活体机器人:学会“生娃”,会自我修复,可繁衍四世
- 解决ubuntu下crossover中qq中文字体乱码问题
热门文章
- 美国华裔二代吐露在美生活真相:出国,请三思而后行
- Zcash 不透明(加密)交易的分析
- 女程序员转测试 欢迎留言讨论
- ZXF20S300磁盘阵列工程指导手册V2[1].00
- oracle 授予 sequence,Oracle中的角色和权限授予
- android 循环录像功能吗,行车记录仪到底要不要循环录像
- 手撕红黑树——C++高阶数据结构详解
- 3.24下午 王希伟5.12福利课上完 剑7-95,剑7-98, 剑8-22,剑8-25
- 笔记之tomcat映射虚拟路径
- linux创建用户张飞,Linux系统操作测试试题 部分