JS实现瀑布流效果


Posted in Javascript onMarch 07, 2020

本文实例为大家分享了JS实现瀑布流效果的具体代码,供大家参考,具体内容如下

话不多说,直接上代码。如下:

CSS部分:

<style>
 .cont{margin: 0 auto;position: relative;}
 .box{float: left;padding: 4px;}
 .imgbox{ padding: 4px;}
 .imgbox img{width: 200px;display: block;border-radius: 4px;}
</style>

HTML部分(图片可自行添加):

<div class="cont">
 <div class="box">
  <div class="imgbox">
   <img src="../img/WaterF2.jpg" alt="">
  </div>
 </div>
 <div class="box">
  <div class="imgbox">
   <img src="../img/WaterF1.jpg" alt="">
  </div>
 </div>
 // ...
 </div>

JS部分:

<script>
 onload = function(){
  var wf = new WaterF();
  wf.init();
 }
 class WaterF{
  constructor(){
   this.clientW = document.documentElement.clientWidth;
   this.abox = document.querySelectorAll(".box");
   this.cont = document.querySelector(".cont");
  }
  init(){
   // 根据屏幕的宽度 / 任意一个结构的宽度,得到一行最多能放多少个图片
   this.maxNum = parseInt(this.clientW / this.abox[0].offsetWidth);
   // 根据一行能放置的个数 * 任意一张图片的宽度,得到了外框的真正的宽度
   this.cont.style.width = this.maxNum * this.abox[0].offsetWidth + "px";
   // 完善布局之后,开始区分第一行和后面的行
   this.firstLine();
   this.otherLine();
  }
  firstLine(){
   // 第一行,获取所有元素的高度放在一个数组中,准备获取最小值
   this.heightArr = [];
   for(var i=0;i<this.maxNum;i++){
    this.heightArr.push(this.abox[i].offsetHeight);
   }
  }
  otherLine(){
   // 需要拿到后面行的所有元素
   for(var i=this.maxNum;i<this.abox.length;i++){
    var min = getMin(this.heightArr);
    var minIndex = this.heightArr.indexOf(min);
    // 设置定位
    this.abox[i].style.position = "absolute";
    // 根据最小值设置top
    this.abox[i].style.top = min + "px";
    // 根据最小值的索引设置left
    this.abox[i].style.left = minIndex * this.abox[0].offsetWidth + "px";
    // 修改最小值为,原来的数据+当前新放置元素的高度
    this.heightArr[minIndex] = this.heightArr[minIndex] + this.abox[i].offsetHeight;
   }
  }
 }
 function getMin(arr){
  var myarr = [];
  for(var j=0;j<arr.length;j++){
   myarr.push(arr[j]);
  }
  return myarr.sort((a,b)=>a-b)[0];
 }
</script>

效果:

JS实现瀑布流效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JSON JQUERY模板实现说明
Jul 03 Javascript
js中将字符串转换成json的三种方式
Jan 12 Javascript
javascript控制台详解
Jun 25 Javascript
iScroll.js 使用方法参考
May 16 Javascript
获取input标签的所有属性的方法
Jun 28 Javascript
javascript实现根据汉字获取简拼
Sep 25 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
Nov 30 Javascript
js处理层级数据结构的方法小结
Jan 17 Javascript
EasyUI为Numberbox添加blur事件的方法
Mar 05 Javascript
在Vue中使用axios请求拦截的实现方法
Oct 25 Javascript
vue实现微信分享链接添加动态参数的方法
Apr 29 Javascript
Javascript Web Worker使用过程解析
Mar 16 Javascript
Vue中使用better-scroll实现轮播图组件
Mar 07 #Javascript
JavaScript实现栈结构Stack过程详解
Mar 07 #Javascript
node创建Vue项目步骤详解
Mar 06 #Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
Mar 06 #Javascript
小程序跳转H5页面的方法步骤
Mar 06 #Javascript
js实现点赞按钮功能的实例代码
Mar 06 #Javascript
微信小程序去除左上角返回键的实现方法
Mar 06 #Javascript
You might like
PHP调用MySQL的存储过程的实现代码
2008/08/12 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
js焦点文字滚动效果代码分享
2015/08/25 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
JavaScript中ES6字符串扩展方法
2016/08/26 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
Pycharm学习教程(2) 代码风格
2017/05/02 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
python求质数列表的例子
2019/11/24 Python
Python autoescape标签用法解析
2020/01/17 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
python实现自动清理重复文件
2020/08/24 Python
Python self用法详解
2020/11/28 Python
关于Python错误重试方法总结
2021/01/03 Python
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
手机银行营销方案
2014/03/14 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript
Mysql中mvcc各场景理解应用
2022/08/05 MySQL