原生JS实现响应式瀑布流布局

原生JS实现的瀑布流布局,代码及demo代码地址:https://github.com/leozdgao/responsive_waterfall

Demo:http://leozdgao.github.io/demo/responsive_waterfall/

演示图:

核心代码:

responsive_waterfall.js

(function() {

var Waterfall = function(opts) {

var minBoxWidth;

Object.defineProperty(this, 'minBoxWidth', {

get: function() { return minBoxWidth; },

set: function(value) {

if(value < 100) value = 100;

if(value > 1000) value = 1000;

minBoxWidth = value;

}

});

opts = opts || {};

var containerSelector = opts.containerSelector || '.wf-container';

var boxSelector = opts.boxSelector || '.wf-box';

// init properties

this.minBoxWidth = opts.minBoxWidth || 250;

this.columns = [];

this.container = document.querySelector(containerSelector);

this.boxes = this.container ?

Array.prototype.slice.call(this.container.querySelectorAll(boxSelector)) : [];

// compose once in constructor

this.compose();

// handle the image or something which might change size after loaded

var images = this.container.querySelectorAll('img'), that = this;

var clr;

for (var i = 0; i < images.length; i++) {

var img = images[i];

img.onload = function() {

if(clr) clearTimeout(clr);

clr = setTimeout(function() {

that.compose(true);

}, 500);

}

}

window.addEventListener('resize', function() {

that.compose();

});

}

// compute the number of columns under current setting

Waterfall.prototype.computeNumberOfColumns = function() {

var num = Math.floor(this.container.clientWidth / this.minBoxWidth);

num = num || 1; // at least one column

return num;

}

// init enough columns and set the width

Waterfall.prototype.initColumns = function(num) {

if(num > 0) {

// create column div

this.columns = [];

var width = (100 / num) + '%';

while(num--) {

var column = document.createElement('div');

column.className = 'wf-column';

column.style.width = width;

this.columns.push(column);

this.container.appendChild(column);

}

}

}

// get the index of shortest column

Waterfall.prototype.getMinHeightIndex = function() {

if(this.columns && this.columns.length > 0) {

var min = this.columns[0].clientHeight, index = 0;

for (var i = 1; i < this.columns.length; i++) {

var columnElem = this.columns[i];

if(columnElem.clientHeight < min) {

min = columnElem.clientHeight;

index = i;

}

}

return index;

}

else return -1;

}

// compose core

Waterfall.prototype.compose = function(force) {

var num = this.computeNumberOfColumns();

var cols = this.columns.length;

if(force || num != cols) {

// remove old column

for (var i = 0; i < this.columns.length; i++) {

var columnElem = this.columns[i];

columnElem.remove();

}

// init new column

this.initColumns(num);

// compose

for (var i = 0, l = this.boxes.length; i < l; i++) {

var box = this.boxes[i];

this.addBox(box);

}

}

}

// add a new box to grid

Waterfall.prototype.addBox = function(elem) {

// push if new box

if(this.boxes.indexOf(elem) < 0) this.boxes.push(elem);

var columnIndex = this.getMinHeightIndex();

if(columnIndex > -1) {

var column = this.columns[columnIndex];

column.appendChild(elem);

}

}

window.Waterfall = Waterfall;

})()

以上所述就是本文给大家分享的全部内容了,希望能够对大家熟练使用javascript有所帮助。相关阅读:

js表单验证实例讲解

java.util.ArrayDeque类使用方法详解

mysql获取字符串长度函数(CHAR_LENGTH)

Fedora下安装php Redis扩展笔记

php+html5+ajax实现上传图片的方法

Windows 10降级指南 简单回滚至Windows 7/8.1的技巧

win10删除的文件怎么找回 win10回收站清空后恢复方法图解

php数组合并的二种方法

Win10如何卸载扬声器在硬件设备连接错误的情况下

WinXP热键小漏洞的秘密分享

jQuery设置单选按钮radio选中/不可用的实例代码

图文详解Java中class的初始化顺序

浅析php中jsonp的跨域实例

JS+CSS实现可以凹陷显示选中单元格的方法

JS结合PHP瀑布流,JavaScript_原生JS实现响应式瀑布流布局,原生JS实现的瀑布流布局,代 - phpStudy...相关推荐

  1. 原生前端实现响应式个人简历网站设计(附源码)

    目录 网站站点 所用技术 实现功能 视频展示 源码 网站站点 胜烨的个人网站 所用技术 HTML css JavaScript 实现功能 响应式界面设计 捕捉用户操作 明暗模式 服务器部署 视频展示 ...

  2. 响应式嵌入 iframe Pym.js

    Pym.js 可以让你在嵌入 iframe 的时候可自动的对 iframe 的大小进行调整以适应父一层容器,并且可以避免跨域问题. 支持浏览器: Internet Explorer 9, 10 (Wi ...

  3. 23-职位分类展示平台响应式网页模板{HTML JS CSS)

    扫码或搜索添加文末公众号「搞前端的半夏」:

  4. ES6+JQuery实现瀑布流效果

    瀑布流 1. 定位后确定浏览器显示区域内,一行能放多少列图片盒子. 获取页面的宽度获取图片盒子的宽度 获取页面的宽度获取图片盒子的宽度 显示的列数=页面宽度/图片盒子宽度 column = pageW ...

  5. 基于jquery响应式网站图片无限加载瀑布流布局

    分享一款效果非常酷的jQuery瀑布流布局无限加载图片效果.整个页面采用响应式布局,图片采用jQuery.Lazyload延时加载技术,提升整个页面的加载速度.效果图如下: 在线预览   源码下载 实 ...

  6. js实现审批流_小程序瀑布流组件:支持翻页与图片懒加载

    电商小程序中,用到瀑布流的地方非常多,每次都写一个瀑布流,重复一次逻辑,作为程序员,肯定是非常不愿意的. 瀑布流的形式都是大同小异,不同的是瀑布流中每个模块的内容,随业务而变化. 所以,我们把瀑布流框 ...

  7. JS——瀑布流无限加载以及动态生成a标签

    如何实现瀑布流排列效果?看下面这张图 通过js去比较每张图片的高度,然后进行排列. 这是一个模拟的瀑布流的list列表项 <div id="main"><div ...

  8. 分页组件change_javascript原生瀑布流+图片懒加载组件

    我不是天使:javascript原生手动分页组件​zhuanlan.zhihu.com 我不是天使:javascript原生自定义轮播图组件​zhuanlan.zhihu.com 一大早就去办签证,啦 ...

  9. 网页瀑布流效果实现的几种方式

    前言 like a mountain that is in our path,wo cannot complain that it is there,we simply have to climb i ...

最新文章

  1. 创建c语言编译错误,创建C语言项目时,无法编译成*.exe文件,提示系统找不到指定的文件...
  2. MySQL的视图、事务和索引
  3. Docker 单机网络
  4. c语言调用oracle函数返回值吗,C语言通过值和引用函数
  5. 【数据结构与算法】之深入解析“分割回文串”的求解思路与算法示例
  6. 万字总结:开源软件通识基础课第三周知识点总结
  7. 前端学习(529):等分布局存在间距得实现得解决方案
  8. css优先级机制说明
  9. Spring4.x()--Spring整合Jdbc的HelloWorld
  10. 【GNN综述】图神经网络的解释性综述
  11. linux系统在不同的局域网中ip地址不变换的问题
  12. 经典常用判断字符串是否有值
  13. 干货|软件测试简历的编写以及注意事项
  14. html实现贪吃蛇游戏(源码)
  15. that、this、these、those的区别
  16. 如何使用手机通过校园无线网在知网免费下载论文
  17. smartBI非数据绑定单元格进行简单合并单元格
  18. mate20pro怎样装鸿蒙系统,华为放大招!华为Mate20系列也能拍月亮,以后还能升级鸿蒙...
  19. 0day攻击防护措施有哪些?
  20. JavaWeb - 小米商城 :首页商品分类展示

热门文章

  1. Word2019修改背景色失效的解决方法
  2. 计算机网络知识点概括
  3. 重要性采样(Importance Sampling)详细学习笔记
  4. css3多列布局(columnz),多列布局相关属性
  5. 如何通过手机APP远程控制PLC
  6. 十六进制账号登录QQ、TIM
  7. 【JAVA】(实训1)EL表达式编码问题
  8. Oracle之数据对象(同义词、序列、视图、表空间、索引)
  9. ctags中−−−kinds=[+|−]kinds的使用
  10. .vimrc 错误 E484:打不开syntax.vim E185:Cannot find color scheme