瀑布流
来源:互联网 发布:外链js文件 编辑:程序博客网 时间:2024/04/29 22:32
结构层
<section class="box"> <figure> <img src="image/1.jpg" /> </figure> <figure> <img src="image/image11.png" /> </figure> <figure> <img src="image/3.jpg" /> </figure> <figure> <img src="image/image10.png" /> </figure> <figure> <img src="image/5.jpg" /> </figure> <figure> <img src="image/image9.png" /> </figure></section>
表现层
<style> *{margin: 0;padding: 0;} img{width:300px;display: block;} figure{display: block;float:left;} </style>
行为层
$(document).ready(function(){ $(window).ready(function(){ imgLocation(); });});function imgLocation(){ var box =$("figure"); var boxWidth = box.eq(0).width(); //得到元素的宽度 var windowWidth = $(window).innerWidth(); //屏幕的宽度 var num = Math.floor(windowWidth /boxWidth );//每行几个图片 var boxArry =[]; //用来存储高度 box.each(function(index,value){ var boxHeight = box.eq(index).height(); if(index<num ){ boxArry[index]=boxHeight; //将盒子高度数值存入数组 }else{ var minboxHeight= Math.min.apply(null,boxArry); var minboxIndex = $.inArray(minboxHeight,boxArry)//最下高度盒子所在的位置 $(value).css({ "position":"absolute", "top": minboxHeight , "left": box.eq(minboxIndex).position().left }); boxArry[minboxIndex]+=box.eq(minboxIndex).height();//变化最小值得高度 } })}
再做一个图片加载的效果
function imgLoad(){ var box=$("figure"); var lastboxHeight = box.last().get(0).offsetTop + Math.floor( box.last().height()/2 ); //获取最后一列的长度 var documentHeight = $(document).width(); var scrollHeight = $(document).scrollTop(); return( lastboxHeight < documentHeight+ scrollHeight )?true:false;}
该变开始的代码
$(document).ready(function () { $(window).on("load",function () { imgLocation(); var dataimg={ "data" :[{"src":"photo1.png"},{"src":"image11.png"} ] } window.onscroll =function () { if ( scrollSlide() ) { $.each(dataimg.data, function(index,value) { var box = $("figure").appendTo( $(".box") ); //console.log( "img/" + $(value).attr("src") ); 打印出具体的图片对象 $("<img />").attr("src","image/" + $(value).attr("src") ).appendTo(box); }); imgLocation(); } } })});
对于本文中用到的方法进行一些说明:
1 Math.floor() 小数值舍入为整数
Math.ceil()、Math.floor() 、Math.round()
Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数(这也是我们在数学课上学到的舍入规则)
2 Math.min()
此方法返回指定数字中较小的一个。
注:如果没有参数,则返回Infinity。如果有某个参数为NaN,或是不能转换成数字的非数字值,则返回NaN。
console.log(Math.min(NaN,5));//输出结果:NaN。console.log(Math.min(4,5));//输出结果:4。
本文中在使用Math.min时,是对一个数组,寻找其中的最小值得时候。
var minboxHeight = Math.min.apply(null , boxArry);
注意,如果你这么写
var a=[2,6,7];console.log(Math.min(a) ) // 输出结果:NaN。console.log(Math.min.apply(null, a)) //输出为2
*此时可以看出,apply将数组扁平化了。
对于可变参数函数,当参数个数和参数值在运行期才能确定时,通过将值放入数组,通过 apply 来间接调用是个很有用的方法。
比如,要求最小值的一组数,它们的个数以及具体数值,在写代码时无从知晓,它们是代码跑起来之后动态生成的,这时候就无法在写代码时直接调用 min 函数,这时候 apply 就派上用场了。*
以上是经过向以为大神请教后得知的,在此非常感谢。
参考网址:http://www.cnblogs.com/Liok3187/p/4602386.html
3 inArray
var minboxIndex = $.inArray(minboxHeight,boxArry); //返回符合数值的位置 图片高度最小的那一个
jquery inarray()函数详解
jquery.inarray(value,Array)
确定第一个参数在数组中的位置(如果没有找到则返回 -1 )。
4 each()
box.each(function(index,value){ ......})
遍历每一个box,你可以试试
console.log(index + "content is" + value )
看看可以得出什么东西
第二种方法做瀑布流(有点假)
结构层
<div id="container"> <ul class="col"> <li><img src="img/1.jpg" alt=""/></li> <li><img src="img/0.jpg" alt=""/></li> <li><img src="img/3.jpg" alt=""/></li> <li><img src="img/1.jpg" alt=""/></li> </ul> <ul class="col"></ul> <ul class="col"></ul>
样式
#container{width:940px;margin:50px auto;}#container ul{width:300px;list-style:none;float:left;margin-right:20px;}#container ul li{margin-bottom:10px;}#container ul li img{width:300px;}
行为层
function loadMeinv(){ var data = 0; for(var i=0;i<9;i++){//每次加载时模拟随机加载图片 data = parseInt(Math.random()*9); var html = ""; html = '<li><img src = img/' +data+'.jpg></li>'; $minUl = getMinUl(); $minUl.append(html); //或者$(html).appendTo( $minUl) }}loadMeinv();//寻找function getMinUl(){ var $arrUl = $("#container .col"); var $minUl =$arrUl.eq(0); $arrUl.each(function(index,elem){ if($(elem).height()<$minUl.height()){ $minUl = $(elem); } }); return $minUl; //高度最小的ul}$(window).on("scroll",function(){ $minUl = getMinUl(); if($minUl.height() <= $(window).scrollTop()+$(window).height()){ //当最短的ul的高度比窗口滚出去的高度+浏览器高度大时加载新图片 loadMeinv(); } })
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 瀑布流
- 安卓5.1屏蔽锁屏界面下拉栏
- 开源之后的小幸福
- 度量快速开发平台邮件发错了怎么办?
- DevStore教你如何玩转饥饿营销
- 安卓Activity生命周期详解
- 瀑布流
- ios UIImagePickerController 导航栏透明
- TCL最强曲面阵营成11.11首选 剁手党也要一再挑T
- [LeetCode]4Sum
- laravel 获得url 参数
- iptables
- Android 中OkHttp(OkHttp3)的cookie
- ios-单例模式
- C语言创建生成WAV音频文件