瀑布流案例

html代码:

  1 <!doctype html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <meta name="viewport"
  6           content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8     <title>Document</title>
  9     <link rel="stylesheet" href="river.css">
 10     <script src="jquery-1.9.1.min.js"></script>
 11     <script src="app.js"></script>
 12
 13 </head>
 14 <body>
 15         <div class="container">
 16             <div class="box">
 17                 <div class="content">
 18                     <img src="1.jpg" alt="">
 19                 </div>
 20             </div>
 21             <div class="box">
 22                 <div class="content">
 23                     <img src="2.jpg" alt="">
 24                 </div>
 25             </div>
 26             <div class="box">
 27                 <div class="content">
 28                     <img src="3.jpg" alt="">
 29                 </div>
 30             </div>
 31             <div class="box">
 32                 <div class="content">
 33                     <img src="1.jpg" alt="">
 34                 </div>
 35             </div>
 36             <div class="box">
 37                 <div class="content">
 38                     <img src="4.jpg" alt="">
 39                 </div>
 40             </div>
 41             <div class="box">
 42                 <div class="content">
 43                     <img src="5.jpg" alt="">
 44                 </div>
 45             </div>
 46             <div class="box">
 47                 <div class="content">
 48                     <img src="6.jpg" alt="">
 49                 </div>
 50             </div>
 51             <div class="box">
 52                 <div class="content">
 53                     <img src="7.jpg" alt="">
 54                 </div>
 55             </div>
 56             <div class="box">
 57                 <div class="content">
 58                     <img src="8.jpg" alt="">
 59                 </div>
 60             </div>
 61             <div class="box">
 62                 <div class="content">
 63                     <img src="9.jpg" alt="">
 64                 </div>
 65             </div>
 66             <div class="box">
 67                 <div class="content">
 68                     <img src="1.jpg" alt="">
 69                 </div>
 70             </div>
 71             <div class="box">
 72                 <div class="content">
 73                     <img src="2.jpg" alt="">
 74                 </div>
 75             </div>
 76             <div class="box">
 77                 <div class="content">
 78                     <img src="3.jpg" alt="">
 79                 </div>
 80             </div>
 81             <div class="box">
 82                 <div class="content">
 83                     <img src="1.jpg" alt="">
 84                 </div>
 85             </div>
 86             <div class="box">
 87                 <div class="content">
 88                     <img src="4.jpg" alt="">
 89                 </div>
 90             </div>
 91             <div class="box">
 92                 <div class="content">
 93                     <img src="5.jpg" alt="">
 94                 </div>
 95             </div>
 96             <div class="box">
 97                 <div class="content">
 98                     <img src="6.jpg" alt="">
 99                 </div>
100             </div>
101             <div class="box">
102                 <div class="content">
103                     <img src="7.jpg" alt="">
104                 </div>
105             </div>
106             <div class="box">
107                 <div class="content">
108                     <img src="8.jpg" alt="">
109                 </div>
110             </div>
111             <div class="box">
112                 <div class="content">
113                     <img src="9.jpg" alt="">
114                 </div>
115             </div>
116         </div>
117 </body>
118 </html>
119 <script src="jquery-1.9.1.min.js"></script>
120 <script src="app.js"></script>

css代码:

 1 img{
 2     width: 100%;
 3     height: auto;
 4 }
 5 .container{
 6     margin: 0 auto;
 7 }
 8 .box{
 9     float: left;
10     position: relative;
11 }
12 .content{
13     width: 190px;
14     height: auto;
15     padding: 5px;
16     border:2px solid #888;
17     float: left;
18     position: relative;
19 }

js代码:

$(function(){
    $(window).on(‘load‘,function(){
        imgLocation();
        //模拟图片数据传输,当页面滚动的时候获得该json数据
        var dataImg={‘data‘:[{‘src‘:‘1.jpg‘},{‘src‘:‘2.jpg‘},{‘src‘:‘3.jpg‘},{‘src‘:‘4.jpg‘},{‘src‘:‘5.jpg‘}]};
        window.onscroll=function(){
                //满足条件的时候进行加载图片;
                if(scrollside()){//如果满足滚动条件,则将图片拼接到页面中;
                    $.each(dataImg.data,function(index,value){
                      var box=$("<div>").addClass("box").appendTo($("#container"));
                      var content=$("<div>").addClass(‘content‘).appendTo(box);
                        // console.log($(value).attr(‘src‘));
                        $(‘<img>‘).attr(‘src‘,$(value).attr(‘src‘)).appendTo(content)
                    });
                        imgLocation();//加载完图片后调用图片的位置;
                }
            };
    });
});
function scrollside(){
    var box=$(‘.box‘);
    var lastboxHeight=box.last().get(0).offsetTop+Math.floor(box.last().height()/2);//获得最后一个盒子的一半距离页面顶部的距离;
    var documentHeight=$(document).width();//页面的高度
    var scrollHeight=$(window).scrollTop();//滚动的高度
    // 当最后一张图片的高度大于滚动的高度+页面的高度。则允许滚动;否则不滚动
    // console.log(scrollHeight);
    // console.log(documentHeight);
    return  ( lastboxHeight < scrollHeight + documentHeight ) ? true : false;
}
function imgLocation(){//图片位置函数
    var box=$(‘.box‘);
    var boxWidth=box.eq(0).width();//获得第一张图片的宽度;其实所有的图片的宽度都是一样的;
    var num=Math.floor($(window).width()/boxWidth);//得到的是每一行显示几张图片
    // console.log(num);//
    var boxArr=[];//创建一个数组,里面来装第一行图片的高;
    box.each(function(index,value){
        // console.log(index+‘--‘+value);得到的是第一个元素
        var boxHeight=box.eq(index).height();//得到所有图片的高度;
        if(index<num){//得出的是第一行的图片
            boxArr[index]=boxHeight;//将第一行图片的高放入数组中;
            // console.log(boxHeight);//5584值不对
        } else{
            var minboxHeight=Math.min.apply(null,boxArr);//获得最小值
            // console.log(minboxHeight);//3131;
            var minboxIndex=$.inArray(minboxHeight,boxArr);
            $(value).css({//遍历图片
                ‘position‘:‘absolute‘,
                ‘top‘:minboxHeight,
                ‘left‘:box.eq(minboxIndex).position().left
            });
            boxArr[minboxIndex]+=box.eq(index).height()
        }
    });
}

知识点总结:

1.$.inArray() 函数用于在数组中查找指定值,并返回它的索引值(如果没有找到,则返回-1);

2.apply() 的作用是改变执行的执行环境。

就是说数组 colH 没有min这个方法,但是Math对象可以求最小值,有min这个方法

例如 var a = Math.min(3,2,1,4),那么a将赋值为1

colH想使用Math对象的min方法,就需要使用call/apply来改变执行环境了。

Math.min(3,2,1,4)等价于 Math.min.apply(null, [3,2,1,4]),null是上下文,传入的对象对应函数中的this,min函数并没有使用this,因此这里可以为null,[3,2,1,4]是给min函数的参数列表。

 1 var A = {
 2   a: 1
 3 }
 4
 5 A.add = function( b ){
 6   console.log(this.a + b);  // 这里的this是A
 7 }
 8
 9 A.add(3); // => 4
10
11 var B = {
12   a: 4
13 }
14
15 A.add.apply(B,[3]);  // => 7, add函数中的this 换成了B

原文地址:https://www.cnblogs.com/yangguoe/p/8203720.html

时间: 2024-08-03 06:35:43

瀑布流案例的相关文章

用jquery实现瀑布流案例

一.瀑布流是我们常见的案例,这里主要讲述,用jquery的方式实现瀑布流的功能! 引言:我们经常见到很多网站的瀑布流功能,如淘宝.京东这些商品等等.. 实现它我们首先考虑几个问题:1.获取到数据   2.排列的方式  3.如何实现排列 其实,在瀑布流里有个核心的功能就是用到了绝对定位 我们逐步深入分析: 这是html的布局,css布局可以自己设置,只要保证grid盒子有绝对定位,其父元素有相对定位即可!后面有参考代码 下面是script部分 这种方式,可以通过for循环按照顺序获取图片的索引值,

HTML学习笔记 css定位浮动及瀑布流案例 第十三节 (原创) 参考使用表

#fd { width: 100px; height: 150px; background-color: forestgreen; float: left; } #sd { width: 150px; height: 100px; background-color: coral; float: left; } #td { width: 100px; height: 100px; background-color: chartreuse; float: left; } #container { w

浮动的瀑布流(案例:蘑菇街)

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>浮动的瀑布流(案例:蘑菇街).html</title> <style> *{margin:0;padding:0;} ul,li{list-style: none} #div1{width:695px;margin:20px auto;bord

JS实现动态瀑布流及放大切换图片效果(js案例)

整理了一下当时学js写的一些案例,再次体验了一把用原生JS实现动态瀑布流效果的乐趣,现在把它整理出来,需要的小伙伴可以参考一下. 该案例主要是用HTML+CSS控制样式,通过JS实现全局瀑布流以及点击图片放大.上下切换效果.HTML布局写的很简单,图片加载主要是在JS中通过访问自定义的JSON字符串来实现.动态瀑布流的原理简单理解就是把新需要加载的图片放在上一排总高度最小的图片或模块下面,实现参差不齐的多栏布局效果.具体效果如下: 做这个案例我用了之前自己封装的框架,所以小伙伴需要到我的另一篇文

图片瀑布流

前言 FineUI控件库发展至今已经有 5 个年头,目前论坛注册的QQ会员 5000 多人,捐赠用户 500 多人(捐赠用户转化率达到10%以上,在国内开源领域相信这是一个梦幻数字!也足以证明FineUI旺盛的生命力!).在这 5 年七年,FineUI总共发布了 100 多个版本!也积攒了大量的典型案例. 然而一直以来,FineUI的典型案例都是在论坛上以帖子的形式进行展示,没有一个集中展示的地方.今天我们就使用前段时间比较流行的瀑布流来解决FineUI典型案例的展示问题.最终的显示效果如下图所

【前端】用jQuery实现瀑布流效果

jQuery实现瀑布流效果 何为瀑布流: 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.最早采用此布局的网站是Pinterest,逐渐在国内流行开来.国内大多数清新站基本为这类风格. 瀑布流的应用: 瀑布流对于图片的展现,是高效而具有吸引力的,用户一眼扫过的快速阅读模式可以在短时间内获得更多的信息量,而瀑布流里懒加载模式又避免了用户鼠标点击的翻页操作,瀑布流的主要特性便是错落有致,定宽而不

jQuery瀑布流无限拖三大利器:masonry+imagesloaded+infinitescroll

瀑布流已经是几乎过时的技术了,不过对于很多想要快速实现它的朋友而言,却绝非易事,因为即使我们已经有很多现成的代码,却发现在自己的开发环境中无法快速得到自己想要的结果.就像我们现在要介绍的三大利器(masonry+imagesloaded+infinitescroll)即使它们是如此有效,却在马上要使用的时候让我们拿着如烫手山芋班很难真正达到我们想要的效果. 下面,我们从其原理来讲解它们的使用,以帮助你更好的发挥它的功效.但为了快速实现,我们不讲解它们的全部内容. 1. 合理的HTML布局是问题的

用原生JavaScript实现图片瀑布流的浏览效果

学习JS,活跃思维,灵活运用的一个较为典型的学习案例.同一个瀑布流的效果但实现方式却很多,利用递归.冒泡等等手法都可以达到你想要的目的.这次要说的就是利用类似递归来实现此效果的原创方案.此方案个人认为难度系数较低 1 <?php 2 //没有数据源,利用遍历对应文件夹中的所有的图片得到的数组模拟成数据源 3 $arr = array(); 4 $dir = @opendir('images'); 5 while($file = @readdir($dir)){ 6 if($file == '.'

ASP.NET仿新浪微博下拉加载更多数据瀑布流效果

闲来无事,琢磨着写点东西.貌似页面下拉加载数据,瀑布流的效果很火,各个网站都能见到各式各样的展示效果,原理大同小异.于是乎,决定自己写一写这个效果,希望能给比我还菜的菜鸟们一点参考价值. 在开始之前,先把实现的基本原理说一下.当夜幕下拉到底部的时候,js可以判断滚动条的位置,到达底部触发js方法,执行jquery的ajax方法,向后台一般处理程序夜幕ashx文件请求数据源,得到json格式的数据源.然后,遍历json数据源,拼接一个li标签,再填充到页面上去. 首先,我们来做个简单的html页面