瀑布流布局原理

HTML:<!DOCTYPE HTML><html><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    <title>无标题文档</title>    <style>        body {            margin: 0;        }

        #ul1 {            width: 1080px;            margin: 100px auto 0;        }

        li {            width: 247px;            list-style: none;            float: left;            margin-right: 10px;        }

        li div {            border: 1px solid #000;            padding: 10px;            margin-bottom: 10px;        }

        li div img {            width: 225px;            display: block;        }    </style>    <script src="ajax.js"></script>    <script>        window.onload = function () {

            var oUl = document.getElementById(‘ul1‘);            var aLi = oUl.getElementsByTagName(‘li‘);            var iLen = aLi.length;            var iPage = 1;            var b = true;

            //初始化数据处理            getList();

            function getList() {                ajax(‘get‘, ‘getPics.php‘, ‘cpage=‘ + iPage, function (data) {

                    var data = JSON.parse(data);

                    if (!data.length) {                        //后续没有数据了                        return;                    }      for (var i = 0; i < data.length; i++) {

            //获取高度最短的li            var _index = getShort();

            var oDiv = document.createElement(‘div‘);            var oImg = document.createElement(‘img‘);            oImg.src = data[i].preview;            oImg.style.width = ‘225px‘;            oImg.style.height = data[i].height * ( 225 / data[i].width ) + ‘px‘;            oDiv.appendChild(oImg);            var oP = document.createElement(‘p‘);            oP.innerHTML = data[i].title;            oDiv.appendChild(oP);

            aLi[_index].appendChild(oDiv);

        }

        b = true;

    });}

window.onscroll = function () {

    var _index = getShort();    var oLi = aLi[_index];

    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

    if (getTop(oLi) + oLi.offsetHeight < document.documentElement.clientHeight + scrollTop) {

        if (b) {            b = false;            iPage++;            getList();        }

    }

}
 function getShort() {                var index = 0;                var ih = aLi[index].offsetHeight;                for (var i = 1; i < iLen; i++) {                    if (aLi[i].offsetHeight < ih) {                        index = i;                        ih = aLi[i].offsetHeight;                    }                }                return index;            }

            function getTop(obj) {                var iTop = 0;                while (obj) {                    iTop += obj.offsetTop;                    obj = obj.offsetParent;                }                return iTop;            }

        }    </script></head>

<body><ul id="ul1">    <li></li>    <li></li>    <li></li>    <li></li></ul></body></html>

result:
				
时间: 2024-10-05 05:07:34

瀑布流布局原理的相关文章

纯css3打造瀑布流布局

纯css3打造瀑布流布局 原理: 1.column-count 把div中的文本分为多少列 2.column-width 规定列宽 3.column-gap 规定列间隙 4.break-inside: avoid; 避免元素内部断行并产生新列 注意: Internet Explorer 9及更早 IE 版本浏览器不支持 column-count 属性. 进阶参考: 原理: http://www.zhangxinxu.com/wordpress/?p=2308 效果:http://www.zhan

用Masonry和jQuery.lazyload插件实现网页瀑布流布局

瀑布流布局 我们常能在网上看到很多瀑布流布局的页面,尤其是很多图片网站,例如百度图片.这种最典型的瀑布流布局,每个元素的宽度是固定的,但图片长度各不相同,于是通过下图这种样子竖着排列了下来,达到了最大的页面空间利用率. 因为对前端开发不了解,一开始为了找到这种布局叫什么名字也是花了我好久时间o(╯□╰)o 瀑布流布局不局限于等宽布局,例如下面这种形式也可以,来自Masonry官网截图. Masonry官网 http://masonry.desandro.com/ 瀑布流布局作为一种响应式布局,网

瀑布流布局使用详解——JQuery插件Isotope(动态实现子项目筛选)

瀑布流布局,听起来听牛逼的样子,其实就是简单的子元素筛选功能.不过这一功能在网站页面布局当中还是很常用的,特别是在电商网站中 经常会有点一个钮筛选,然后页面的子元素刷的以下变了样.接下来,我们先简单介绍下概念和用法,然后详解这一功能的实现. 瀑布流概念: 又称瀑布流式布局,是比较流行的一种网站页面布局方式.视觉表现为多栏布局,附带筛选功能,当下在国内十分流行. 瀑布流原理: 通过为子元素定义不同的class类名,然后通过类名及其内容进行筛选排序.   这一插件在实现网站元素动态切换,调整整体顺序

AJAX+json+jquery实现预加载瀑布流布局

宽度是一定的高度不定的瀑布流布局 也可以说是无缝拼图 当浏览器滚动到底部时候自动加载图片 加载的图片地址用json 在img.js里 ,还有正在加载动画是用 css3制作的 在ff等支持css3可以显示 你如果想全面支持浏览器可以用gif动画 代码里有详细解释就不多说了 ?1. [代码]预加载/瀑布流  <!doctype html><html><head><meta charset="utf-8"><title>定宽Jque

JS瀑布流布局模式(1)

在实际的项目中,偶尔会用到一种布局——瀑布流布局.瀑布流布局的特点是,在多列布局时,可以保证内容区块在水平方向上不产生大的空隙,类似瀑布的效果.简单的说,在垂直列表里,内容区块是一个挨着一个的.当内容较多且不固定时,就依赖于html结构的顺序,非常受限制.这里给了一个简单的例子,只要传入列表的数量和宽度,就可以动态的将数据放到对应的列里. 原理 1.定义两个容器,一个是存放内容,一个是要展示的列表. 2.将每列的offsetHeight存入一个数组里,比较得出最小的那一列,然后把数据放到最小的列

微信小程序 瀑布流布局

今天做小程序的时候,碰到一个比较常见的需求,就是要瀑布流布局,两列,交错分布,大概如下图 最终要实现的结果就是如左图所示. 不过在微信小程序里面,不能通过JavaScript来直接操作dome,所以一些常用的方法在这里都没有办法用了.这让笔者非常着急,因为项目比较赶,不能因为这种低级的布局问题拖慢了进度. 百度了半天,发现了css3的column这个属性,但是最后实现出来的方法就如右图所示,这不符合需求,需求是两列,从左到右进行排列的,大概就像小红书APP那种瀑布流布局 最后笔者终于找到一种非常

网页瀑布流布局jQuery实现代码

网页瀑布流布局jQuery实现代码 这篇文章主要为大家详细介绍了网页瀑布流布局jQuery实现方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 什么是瀑布流网页布局? 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 下面来看代码,用纯CSS3来做看效果怎样! HTML 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2

瀑布流布局

一.总结: 首先是分清楚设计稿的结构,下面瀑布流布局首先是将容器分出三个有固定宽度的div,第一列多张图片的横向排列采用inline-block布局的方式,但是三列的横向显示只采用inline-block的布局方式,这里不是很尽如人意.后面两列还结合了position的方式定位才达到理想的效果.刚开始我错误的给第二列采用了position:relative的方式来定位,出现了如下错误: 给第二列采用了relative的定位方式,导致整个瀑布流布局的高度变成了三列高度的和2320px,页面下面留下

JavaScript——基本的瀑布流布局及ajax动态新增数据

本文用纯js代码手写一个瀑布流网页效果,初步实现一个基本的瀑布流布局,以及滚动到底部后模拟ajax数据加载新图片功能. 缺点: 1. 程序不是响应式,不能实时调整页面宽度: 2. 程序中当新增ajax模拟数据图片后,是将整个页面的所有图片都重新定位一次. 3. 程序是等所有图片加载完成后再读取图片的尺寸,实际中肯定不能这样做. 4. 实际项目中,应该由后台程序给出图片尺寸值,在js代码中直接使用图片的width属性. 本程序思路: html结构: <body> <div id="