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广告实现代码
Nov 17 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
Jun 27 Javascript
利用jQuery实现可以编辑的表格
May 26 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
Mar 19 Javascript
使用jQuery给input标签设置默认值
Jun 20 Javascript
Bootstrap CSS组件之输入框组
Dec 17 Javascript
webpack引入eslint配置详解
Jan 22 Javascript
详解vue 路由跳转四种方式 (带参数)
Apr 28 Javascript
在vue中使用vuex,修改state的值示例
Nov 08 Javascript
Element Badge标记的使用方法
Jul 27 Javascript
vue实现路由懒加载的3种方法示例
Sep 01 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日历程序
2006/12/06 PHP
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
php开发时容易忘记的一些技术细节
2016/02/03 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
jQuery 获取URL参数的插件
2010/03/04 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
js实现微信聊天界面
2020/08/09 Javascript
python使用pycharm环境调用opencv库
2018/02/11 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
大学生优秀的自我评价分享
2013/10/22 职场文书
医院护士的求职信
2014/01/03 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
2014会计年终工作总结
2014/12/20 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
计划生育责任书
2015/05/09 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
PHP设计模式(观察者模式)
2021/07/07 PHP