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 相关文章推荐
js中的window.open返回object的错误的解决方法
Aug 15 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
Apr 02 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
Mar 20 Javascript
Eclipse配置Javascript开发环境图文教程
Jan 29 Javascript
全面解析Bootstrap排版使用方法(标题)
Nov 30 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
Apr 01 Javascript
Angular resolve基础用法详解
Oct 03 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
Feb 28 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
Sep 10 Javascript
vue实现购物车小案例
Sep 27 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
Nov 12 Javascript
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
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的静态成员函数效率更高的原因
2014/06/13 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
jquery 简单导航实现代码
2009/09/11 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
jQuery pagination分页示例详解
2018/10/23 jQuery
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
关于Python面向对象编程的知识点总结
2017/02/14 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
Python封装原理与实现方法详解
2018/08/28 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
个人简历中的自我评价范例
2013/10/29 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
科普 | 业余无线电知识-波段篇
2022/02/18 无线电