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 相关文章推荐
jquery 插件学习(四)
Aug 06 Javascript
Jquery中ajax方法data参数的用法小结
Feb 12 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
Jul 29 Javascript
3种Jquery限制文本框只能输入数字字母的方法
Dec 03 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
Dec 28 Javascript
JavaScript中eval函数的问题
Jan 31 Javascript
jQuery实现文字自动横移
Jan 08 Javascript
简单实现JS上传图片预览功能
Apr 14 Javascript
浅析JavaScript 函数防抖和节流
Jul 13 Javascript
Vue组件跨层级获取组件操作
Jul 27 Javascript
vue addRoutes路由动态加载操作
Aug 04 Javascript
vue 组件基础知识总结
Jan 26 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位运算的用途
2017/03/12 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
javascript判断firebug是否开启的方法
2016/11/23 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
python中操作文件的模块的方法总结
2021/02/04 Python
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
局域网定义和特性
2016/01/23 面试题
工程师岗位职责
2013/11/08 职场文书
公司会议策划方案
2014/05/17 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
会计人员演讲稿
2014/09/11 职场文书
离婚协议书范文2014
2014/10/16 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
Nginx域名转发使用场景代码实例
2021/03/31 Servers
springboot+VUE实现登录注册
2021/05/27 Vue.js
Windows中Redis安装配置流程并实现远程访问功能
2021/06/07 Redis
Python中的socket网络模块介绍
2022/07/23 Python