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 相关文章推荐
解析javascript中鼠标滚轮事件
May 26 Javascript
javascript实现类似百度分享功能的方法
Jul 27 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
Feb 26 Javascript
Bootstrap每天必学之导航条(二)
Mar 01 Javascript
javascript拖拽应用实例
Mar 25 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
May 12 Javascript
静态页面html中跳转传值的JS处理技巧
Jun 22 Javascript
Javascript中Promise的四种常用方法总结
Jul 14 Javascript
js禁止浏览器页面后退功能的实例(推荐)
Sep 01 Javascript
node实现登录图片验证码的示例代码
Apr 20 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
May 07 Javascript
Vue组件跨层级获取组件操作
Jul 27 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 根据IP地址控制访问的代码
2010/04/22 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
2014/11/20 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
python生成式的send()方法(详解)
2017/05/08 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
python实现车牌识别的示例代码
2019/08/05 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
Python脚本调试工具安装过程
2021/01/11 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
饲料采购员岗位职责
2013/12/19 职场文书
运动会广播稿60字
2014/01/15 职场文书
大课间活动制度
2014/01/18 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书