JS结合PHP瀑布流,JavaScript_原生JS实现响应式瀑布流布局,原生JS实现的瀑布流布局,代 - phpStudy...
原生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...相关推荐
- 原生前端实现响应式个人简历网站设计(附源码)
目录 网站站点 所用技术 实现功能 视频展示 源码 网站站点 胜烨的个人网站 所用技术 HTML css JavaScript 实现功能 响应式界面设计 捕捉用户操作 明暗模式 服务器部署 视频展示 ...
- 响应式嵌入 iframe Pym.js
Pym.js 可以让你在嵌入 iframe 的时候可自动的对 iframe 的大小进行调整以适应父一层容器,并且可以避免跨域问题. 支持浏览器: Internet Explorer 9, 10 (Wi ...
- 23-职位分类展示平台响应式网页模板{HTML JS CSS)
扫码或搜索添加文末公众号「搞前端的半夏」:
- ES6+JQuery实现瀑布流效果
瀑布流 1. 定位后确定浏览器显示区域内,一行能放多少列图片盒子. 获取页面的宽度获取图片盒子的宽度 获取页面的宽度获取图片盒子的宽度 显示的列数=页面宽度/图片盒子宽度 column = pageW ...
- 基于jquery响应式网站图片无限加载瀑布流布局
分享一款效果非常酷的jQuery瀑布流布局无限加载图片效果.整个页面采用响应式布局,图片采用jQuery.Lazyload延时加载技术,提升整个页面的加载速度.效果图如下: 在线预览 源码下载 实 ...
- js实现审批流_小程序瀑布流组件:支持翻页与图片懒加载
电商小程序中,用到瀑布流的地方非常多,每次都写一个瀑布流,重复一次逻辑,作为程序员,肯定是非常不愿意的. 瀑布流的形式都是大同小异,不同的是瀑布流中每个模块的内容,随业务而变化. 所以,我们把瀑布流框 ...
- JS——瀑布流无限加载以及动态生成a标签
如何实现瀑布流排列效果?看下面这张图 通过js去比较每张图片的高度,然后进行排列. 这是一个模拟的瀑布流的list列表项 <div id="main"><div ...
- 分页组件change_javascript原生瀑布流+图片懒加载组件
我不是天使:javascript原生手动分页组件zhuanlan.zhihu.com 我不是天使:javascript原生自定义轮播图组件zhuanlan.zhihu.com 一大早就去办签证,啦 ...
- 网页瀑布流效果实现的几种方式
前言 like a mountain that is in our path,wo cannot complain that it is there,we simply have to climb i ...
最新文章
- 创建c语言编译错误,创建C语言项目时,无法编译成*.exe文件,提示系统找不到指定的文件...
- MySQL的视图、事务和索引
- Docker 单机网络
- c语言调用oracle函数返回值吗,C语言通过值和引用函数
- 【数据结构与算法】之深入解析“分割回文串”的求解思路与算法示例
- 万字总结:开源软件通识基础课第三周知识点总结
- 前端学习(529):等分布局存在间距得实现得解决方案
- css优先级机制说明
- Spring4.x()--Spring整合Jdbc的HelloWorld
- 【GNN综述】图神经网络的解释性综述
- linux系统在不同的局域网中ip地址不变换的问题
- 经典常用判断字符串是否有值
- 干货|软件测试简历的编写以及注意事项
- html实现贪吃蛇游戏(源码)
- that、this、these、those的区别
- 如何使用手机通过校园无线网在知网免费下载论文
- smartBI非数据绑定单元格进行简单合并单元格
- mate20pro怎样装鸿蒙系统,华为放大招!华为Mate20系列也能拍月亮,以后还能升级鸿蒙...
- 0day攻击防护措施有哪些?
- JavaWeb - 小米商城 :首页商品分类展示
热门文章
- Word2019修改背景色失效的解决方法
- 计算机网络知识点概括
- 重要性采样(Importance Sampling)详细学习笔记
- css3多列布局(columnz),多列布局相关属性
- 如何通过手机APP远程控制PLC
- 十六进制账号登录QQ、TIM
- 【JAVA】(实训1)EL表达式编码问题
- Oracle之数据对象(同义词、序列、视图、表空间、索引)
- ctags中−−−kinds=[+|−]kinds的使用
- .vimrc 错误 E484:打不开syntax.vim E185:Cannot find color scheme