瀑布流的实现方式

html

<div id="container">    <div class="box">        <div class="box_img">            <img src="img/1.png" />        </div>    </div>    <div class="box">        <div class="box_img">            <img src="img/2.png" />        </div>    </div>    <div class="box">        <div class="box_img">            <img src="img/3.png" />        </div>    </div>    <div class="box">        <div class="box_img">            <img src="img/4.png" />        </div>    </div>    <div class="box">        <div class="box_img">            <img src="img/5.png" />        </div>    </div>    <div class="box">        <div class="box_img">            <img src="img/6.png" />        </div>    </div>    <div class="box">        <div class="box_img">            <img src="img/7.png" />        </div>    </div>    <div class="box">        <div class="box_img">            <img src="img/8.png" />        </div>    </div>    <div class="box">        <div class="box_img">            <img src="img/9.jpg" />        </div>    </div>    <div class="box">        <div class="box_img">            <img src="img/5.png" />        </div>    </div>    <div class="box">        <div class="box_img">            <img src="img/6.png" />        </div>    </div>    <div class="box">        <div class="box_img">            <img src="img/7.png" />        </div>    </div></div>css
#container{    position: relative;}.box{    padding: 10px;    float: left;}/*将承载图片的容器定制颜色及边框大小和圆角*/.box_img{    width: 282px;    overflow: hidden;}js
 window.onload = function(){        //waterFlow("container", "box");        waterFlow("container1", "box");    };    function waterFlow(parent, chirld){        var wparent = document.getElementById(parent);//获取父级div, 最外级容器        var allArr = getAllChirld(wparent,chirld);//获取到所有的class为box的容器div        var wscreenWidth = document.documentElement.clientWidth;//获取屏幕宽度        var wchirldWidth = wparent.getElementsByTagName("*");//获取所有的标签        var num = Math.floor(wscreenWidth/wchirldWidth[0].offsetWidth);//这是一个Math算法, 目的是将小数转变为整数,        // 从而可以知道每行最多容纳几张图片        wparent.style.cssText = ‘width:‘+wchirldWidth[0].offsetWidth*num+‘px;margin:0 auto‘;//固定每行摆放个数 和上下左右边距        //获得每行的最小高度        getMinHeightOfCols(allArr, num);    }    function getAllChirld(parent,classname){        //获取所有的标签        var wchirld = parent.getElementsByTagName("*");        //创建数组        var chirldArr = [];        //遍历wchirld, 将其中className等于classname(传进来的参数)相同的标签放入数组chirldArr中        for(var i = 0; i<wchirld.length; i++){            if(wchirld[i].className==classname){                //因为是位push所以没放进去一个, 都是在数组的最后一个                chirldArr.push(wchirld[i]);            }        }        //返回该数组        return chirldArr;    }    function getMinHeightOfCols(chirdArr, num){        //创建数组, 用来盛放每一行的高度        var onlyOneColsArr = [];        for(var i = 0; i<chirdArr.length; i++){

            if(i<num){                //num为传进来的参数, 即为每行放图片的张数, 此步骤的目的是为了将第一行每张图片的高度遍历出来存放如新数组                onlyOneColsArr[i]=chirdArr[i].offsetHeight;            } else {                //当大于每行存放的图片个数时进入该方法, Math.min.apply这个方法是为了得到数组中的最小值                var minHeightOfCols = Math.min.apply(null, onlyOneColsArr);                //此方法的目的是为了得到最小高度图片的下表, 也就是在每行的第几张, 具体方法见下面                var minHeightOfindex = getminIndex(onlyOneColsArr, minHeightOfCols);                //定义布局方式为绝对布局                chirdArr[i].style.position = "absolute";                //得到下一行图片应放的高度                chirdArr[i].style.top = minHeightOfCols + "px";                //得到下一行图片应放于那个位置                chirdArr[i].style.left = chirdArr[minHeightOfindex].offsetLeft + "px";                //将两张图片高度相加得到一个新的高度用来进行下一次的计算                onlyOneColsArr[minHeightOfindex] += chirdArr[i].offsetHeight;            }        }

    }//此方法是为了进行最小高度下标的确定    function getminIndex(onlyOneColsArr, min){        //遍历传进来的高度数组        for(var i in onlyOneColsArr){            //如果高度等于最小高度, 返回i即为该图片下标            if(onlyOneColsArr[i] == min){                return i;            }        }    }
 
 
时间: 2024-08-07 01:17:13

瀑布流的实现方式的相关文章

安卓中的瀑布流

过年没回家,宅在家里看了很多博客,顺手写一下自己的一些收货.. android中的瀑布流的实现原理,来自郭大神的CSDN 转载注明出处http://blog.csdn.net/guolin_blog/article/details/10470797 实现原理:瀑布流的布局方式虽然看起来好像排列的很随意,其实它是有很科学的排列规则的.整个界面会根据屏幕的宽度划分成等宽的若干列,由于手机的屏幕不是很大,这里我们就分成三列.每当需要添加一张图片时,会将这张图片的宽度压缩成和列一样宽,再按照同样的压缩比

Android瀑布流照片墙实现,体验不规则排列的美感

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/10470797 传统界面的布局方式总是行列分明.坐落有序的,这种布局已是司空见惯,在不知不觉中大家都已经对它产生了审美疲劳.这个时候瀑布流布局的出现,就给人带来了耳目一新的感觉,这种布局虽然看上去貌似毫无规律,但是却有一种说不上来的美感,以至于涌现出了大批的网站和应用纷纷使用这种新颖的布局来设计界面. 记得我在之前已经写过一篇关于如何在Android上实现照片墙功能的文章了,但那个

使用RecyclerView实现瀑布流的效果

主函数: public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private List<String> dataList = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS

Android瀑布流照片

http://blog.csdn.net/guolin_blog/article/details/10470797 记得我在之前已经写过一篇关于如何在Android上实现照片墙功能的文章了,但那个时候是使用的GridView来进行布局的,这种布局方式只适用于“墙”上的每张图片大小都相同的情况,如果图片的大小参差不齐,在GridView中显示就会非常的难看.而使用瀑布流的布局方式就可以很好地解决这个问题,因此今天我们也来赶一下潮流,看看如何在Android上实现瀑布流照片墙的功能. 首先还是讲一下

javascript自适应宽度的瀑布流实现思路

这里主要介绍瀑布流的一种实现方法:绝对定位(css)+javascript+ajax+json.简单一点如果不做滚动加载的话就是绝对定位(css)+javascript了,ajax和json是滚动加载更多内容的时候用到的,感兴趣的你可以参考下哦 这样的布局并不陌生,从2011年Pinterest创立以来,中国互联网就迅速掀起了一股模仿Pinterest的热潮,国内有众多网站采用瀑布流的布局方式,例如花瓣网.美丽说等等.而事实上在中国互联网,模仿一些在国外被人看好的模式(当然,你也可以说是山寨或抄

瀑布流照片墙与图片缓存的完美结合

传统界面的布局方式总是行列分明.坐落有序的,这种布局已是司空见惯,在不知不觉中大家都已经对它产生了审美疲劳.这个时候瀑布流布局的出现,就给人带来了耳目一新的感觉,这种布局虽然看上去貌似毫无规律,但是却有一种说不上来的美感,以至于涌现出了大批的网站和应用纷纷使用这种新颖的布局来设计界面. 记得我在之前已经写过一篇关于如何在Android上实现照片墙功能的文章了,但那个时候是使用的GridView来进行布局的,这种布局方式只适用于“墙”上的每张图片大小都相同的情况,如果图片的大小参差不齐,在Grid

关于产品的一些思考——瀑布流加载

对网站页面的瀑布流加载已经忍受了很长时间,今天就在这里记录一下,讨论下那些令我"厌恶"的瀑布流加载. 当初好像是因为Pinterest,各大网站开始纷纷引入瀑布流加载方式,引入瀑布流仁者见仁智者见智,个人觉得还是不是很友好的(瀑布流适合图片类网站,针对文章性网站,真的不是很合适),我是可以在同一个页面看完所有相关的内容,可是我要无限地滚动鼠标,无限地点按向下箭头或者无限地点按空格键,还是觉得没有点击下一页要好,尤其是当用户看了很多内容,想回头寻找自己感兴趣的内容的时候,当然可以使用Ct

iOS tableview(瀑布流) 滑动的时候卡顿解决

写的一个程序中用到了瀑布流的展现方式,但是发现当图片数量太大的时候,在iPhone4上会不流畅,这点很不爽. 写代码之初是做了一些优化的,比如cell重用,异步加载,但是还是很卡. 终于后来发现了症结所在,那就是,如果滑动太快,可能同时就发出了比如10个图片请求.这些请求虽然都在后台运行,但是它们可能在同一个时间点返回UI线程.这个时候如果加载图片到UIImageView太频繁,就会造成UI卡得严重.(虽然在new iPad和iPhone4s上看不出来) 在找到这个问题的同时,也发现perfor

vuejs和webpack项目(VueComponent)初尝试——瀑布流组件

碎碎念:     好久不见,最近自己有些懈怠没更过多少博,主要原因之一是对自己学习方式的一些思考,翻看之前的博客多是记录学习笔记这反映出了自己对于前端还停留在学习-复习知识点的阶段压根没多少实践经验啊这让我有些惶恐,原因之二是前段时间接触并了解性地学习了amd,cmd模块,angular和vue,一些模板引擎,less预编译语言,以及开发相关的各种构建工具...讲真前端真的好杂,心有余而力不足有时就挺迷茫,所以这些仅仅只是接触是接触跟着官网了解学习并没有深入原理性的探索学习.曾经我在一开始就尝试