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代码压缩器
Oct 12 Javascript
如何在Web页面上直接打开、编辑、创建Office文档
Mar 12 Javascript
javascript奇异的arguments分析
Oct 20 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
Dec 17 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
Nov 26 Javascript
用Jquery实现滚动新闻
Feb 12 Javascript
javascript不同类型数据之间的运算的转换方法
Feb 13 Javascript
无循环 JavaScript(map、reduce、filter和find)
Apr 08 Javascript
微信小程序动态的加载数据实例代码
Apr 14 Javascript
node.js基于express使用websocket的方法
Nov 09 Javascript
浅析java线程中断的办法
Jul 29 Javascript
jQuery实现简单三级联动效果
Sep 05 jQuery
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/03/27 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
PHP服务器页面间跳转实现方法
2012/08/02 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
JS实现的省份级联实例代码
2013/06/24 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
python批量导出导入MySQL用户的方法
2013/11/15 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
python上selenium的弹框操作实现
2020/07/13 Python
python制作抽奖程序代码详解
2021/01/15 Python
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
Java程序员面试题
2016/09/27 面试题
个人找工作自荐信格式
2013/09/21 职场文书
专科毕业生学习生活的自我评价
2013/10/26 职场文书
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
中学生寄语大全
2014/04/03 职场文书
环保小标语
2014/06/13 职场文书
食品工程专业求职信
2014/06/15 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
个人授权委托书
2014/09/15 职场文书
2015年招生工作总结
2015/05/04 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
教师节祝酒词
2015/08/11 职场文书
Python中文分词库jieba(结巴分词)详细使用介绍
2022/04/07 Python