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冒泡、捕获事件及阻止冒泡方法详细总结
May 08 Javascript
escape函数解决js中ajax传递中文出现乱码问题
Oct 30 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
Jun 05 Javascript
bootstrap基础知识学习笔记
Nov 02 Javascript
localStorage实现便签小程序
Nov 28 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
Jan 03 Javascript
Vue框架之goods组件开发详解
Jan 25 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
Aug 31 Javascript
Vue 禁用浏览器的前进后退操作
Sep 04 Javascript
H5+css3+js搭建带验证码的登录页面
Oct 11 Javascript
vue下载二进制流图片操作
Oct 26 Javascript
vue 把二维或多维数组转一维数组
Apr 24 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生成缩略图的函数代码(修改版)
2011/01/18 PHP
php模拟post提交数据的方法
2015/02/12 PHP
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
javascript实现简单页面倒计时
2021/03/02 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
跟老齐学Python之模块的加载
2014/10/24 Python
简化Python的Django框架代码的一些示例
2015/04/20 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
python reduce 函数使用详解
2017/12/05 Python
Django model序列化为json的方法示例
2018/10/16 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
基于python使用tibco ems代码实例
2019/12/20 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
食堂个人先进事迹
2014/01/22 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
2014年共青团工作总结
2014/12/10 职场文书
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers