jquery实现简单的瀑布流布局

下面是详细讲解“jQuery实现简单的瀑布流布局”的完整攻略。

什么是瀑布流布局

瀑布流布局,也称为瀑布流式布局、瀑布式布局或瀑布流排版,指的是将内容按照一定的规则排列,形成像瀑布一样的瀑布流效果的网页布局方式。一般用于图片等多媒体内容的展示。

实现瀑布流布局

步骤一:定义html结构

首先定义一个容器,用来存放图片等内容,如下所示:

<div class="container"></div>

步骤二:引入jQuery库

<head>标签中引入jQuery库,如下所示:

<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>

步骤三:定义CSS样式

为图片和容器定义比较基础的CSS样式,如下所示:

.container {
  width: 1000px;
  margin: 0 auto;
  overflow: hidden;
}

.box {
  width: 300px;
  float: left;
  margin: 10px;
}

其中,.box是每一个图片容器的类名。

步骤四:使用jQuery实现瀑布流布局

在上述步骤的基础上,使用jQuery实现瀑布流布局。下面是具体实现的代码:

$(window).on('load', function(){
    waterFall();
    var data = {
      "data": [
        {"src": "1.jpg"},
        {"src": "2.jpg"},
        {"src": "3.jpg"},
        {"src": "4.jpg"},
        {"src": "5.jpg"},
        {"src": "6.jpg"},
        {"src": "7.jpg"},
        {"src": "8.jpg"},
        {"src": "9.jpg"},
        {"src": "10.jpg"},
        {"src": "11.jpg"},
        {"src": "12.jpg"},
        {"src": "13.jpg"},
        {"src": "14.jpg"}
      ]
    };
    $(window).on('scroll', function(){
        if(checkScrollSlide){
            $.each(data.data, function(index, value){
                var oBox = $('<div>').addClass('box').appendTo($('.container'));
                var oPic = $('<div>').addClass('pic').appendTo($(oBox));
                $('<img>').attr('src', './img/' + $(value).attr('src')).appendTo($(oPic));
            });
            waterFall();
        }
    });
});
function checkScrollSlide(){
    var lastBox = $('.box').last();
    var lastBoxDis = $(lastBox).offset().top + Math.floor($(lastBox).outerHeight()/2);
    var scrollTop = $(window).scrollTop();
    var documentH = $(window).height();
    return (lastBoxDis<scrollTop+documentH)?true:false;
}
function waterFall(){
    var $boxs = $('.box');
    var w = $boxs.eq(0).outerWidth();
    var cols = Math.floor($(window).width()/w);
    $('.container').width(w*cols).css('margin', '0 auto');
    var hArr = [];
    $boxs.each(function(index, value){
        var h = $boxs.eq(index).outerHeight();
        if(index < cols){
            hArr[index] = h;
        }else{
            var minH = Math.min.apply(null, hArr);
            var minHIndex = $.inArray(minH, hArr);
            $(value).css({
                'position': 'absolute',
                'top': minH+'px',
                'left': minHIndex*w+'px'
            });
            hArr[minHIndex] += $boxs.eq(index).outerHeight();
        }
    });
}

完整的代码可以参见 GitHub

示例一

为了更好地理解上述代码,下面给出示例一:

// 定义数据对象
var data = {
  "data": [
    {"src": "1.jpg"},
    {"src": "2.jpg"},
    {"src": "3.jpg"},
    {"src": "4.jpg"},
    {"src": "5.jpg"},
    {"src": "6.jpg"},
    {"src": "7.jpg"},
    {"src": "8.jpg"},
    {"src": "9.jpg"},
    {"src": "10.jpg"},
    {"src": "11.jpg"},
    {"src": "12.jpg"},
    {"src": "13.jpg"},
    {"src": "14.jpg"}
  ]
};

// 定义滚动事件
$(window).on('scroll', function(){
    if(checkScrollSlide()){
        $.each(data.data, function(index, value){
            // 创建图片容器
            var oBox = $('<div>').addClass('box').appendTo($('.container'));
            // 创建图片
            var oPic = $('<div>').addClass('pic').appendTo($(oBox));
            $('<img>').attr('src', './img/' + $(value).attr('src')).appendTo($(oPic));
        });
        waterFall();
    }
});

上述代码中,定义了一个数据对象data,包含了14张图片的url。在滚动事件中,根据滚动事件是否到达页面底部,决定是否创建图片容器和图片元素。

示例二

为了更好地理解上述代码,下面给出示例二:

// 定义waterFall函数
function waterFall(){
    // 获取图片容器
    var $boxs = $('.box');
    // 获取容器宽度
    var w = $boxs.eq(0).outerWidth();
    // 获取列数
    var cols = Math.floor($(window).width()/w);
    // 设置容器宽度并居中
    $('.container').width(w*cols).css('margin', '0 auto');
    // 定义一个数组,用于保存每一列的高度
    var hArr = [];
    $boxs.each(function(index, value){
        // 获取图片高度
        var h = $boxs.eq(index).outerHeight();
        // 判断是否是第一行
        if(index < cols){
            hArr[index] = h;
        }else{
            // 获取最小高度
            var minH = Math.min.apply(null, hArr);
            // 获取最小高度的列
            var minHIndex = $.inArray(minH, hArr);
            // 设置位置
            $(value).css({
                'position': 'absolute',
                'top': minH+'px',
                'left': minHIndex*w+'px'
            });
            // 更新高度
            hArr[minHIndex] += $boxs.eq(index).outerHeight();
        }
    });
}

上述代码中,定义了一个名为waterFall的函数,用于实现瀑布流布局。在此函数中,首先获取图片容器的高度、每一个容器的宽度、每一行容器的列数,并将容器居中。接着,定义一个数组用于保存每一列的高度,并遍历每一个容器,获取其高度和所在列的位置,最后更新每一列的高度。

总结

通过上述实现瀑布流布局的步骤和示例,我们可以发现,使用jQuery实现瀑布流布局的主要步骤有:定义html结构、引入jQuery库、定义CSS样式和使用jQuery实现瀑布流布局。可以通过数据对象和遍历实现动态加载,并通过waterFall函数实现瀑布流布局效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery实现简单的瀑布流布局 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jQWidgets jqxExpander高度属性

    jQWidgets jqxExpander高度属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包括表格等。jqxExpander是jQ的一个组件,创建可折叠的面板。jqxExpander提供了多个属性,其中包括height属性。本文将详细介绍height属性提供两个示例。 height属性的基本语法 height属性用于设…

    jquery 2023年5月9日
    00
  • Jquery插件 easyUI属性汇总

    下面我来详细讲解“Jquery插件 easyUI属性汇总”的完整攻略。 简介 easyUI是一种基于jQuery的UI库,它有着极佳的界面美观度和自定义性,支持复杂的交互效果和动态数据展示。本文主要对easyUI的属性进行汇总,并给出一些示例说明。 常用属性 对话框dialog title: 对话框的标题文本 width: 对话框的宽度 height: 对话…

    jquery 2023年5月28日
    00
  • jQuery之尺寸调整组件的深入解析

    jQuery之尺寸调整组件的深入解析 概述 jQuery提供了一些方便的方法用于调整元素的尺寸和位置,包括元素的宽度、高度、内边距和外边距。这些方法可以被封装成函数,以便在应用程序中重复使用。 常用的尺寸调整方法 width() 和 height() width() 和 height() 方法用于获取或设置元素的宽度和高度。例如: $(document).r…

    jquery 2023年5月28日
    00
  • jQWidgets jqxExpander collapse()方法

    jQWidgets jqxExpander collapse()方法 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI组件和工具包括表格、下拉等。jqxExpander是jQWidgets的组件之一,用于创建可折叠的面板。collapse()方法是jqxExpander的一个方法,用于折叠面板。 collapse()方法的基本语法 co…

    jquery 2023年5月9日
    00
  • jQWidgets jqxNavBar height 属性

    以下是关于 jQWidgets jqxNavBar 组件中 height 属性的详细攻略。 jQWidgets jqxNavBar height 属性 jQWidgets jqxNavBar 组件的 height 属性用于设置导航栏高度。该属性可以是数字或字符串。 语法 $(‘#navbar’).jqxNavBar({ height: value }); /…

    jquery 2023年5月12日
    00
  • Jquery跨浏览器文本复制插件Zero Clipboard的使用方法

    Jquery跨浏览器文本复制插件Zero Clipboard的使用方法 简介 Zero Clipboard是一款基于Jquery的跨浏览器复制文本插件,可以帮助用户在网站中快速复制指定的文本内容,支持IE、Safari、Chrome、Firefox和Opera等主流浏览器,使用方便,功能强大。 安装 在使用Zero Clipboard插件之前,需要先在页面中…

    jquery 2023年5月27日
    00
  • JQuery获取元素尺寸、位置及页面滚动事件应用示例

    下面是对于“JQuery获取元素尺寸、位置及页面滚动事件应用示例”的详细攻略: 获取元素的尺寸和位置 JQuery提供了许多方法可以用来获取元素的尺寸和位置,这些方法常用于响应式设计和交互效果的实现。 获取元素尺寸 width方法:获取元素内容区域的宽度。 height方法:获取元素内容区域的高度。 innerWidth方法:获取元素包括内边距(paddin…

    jquery 2023年5月28日
    00
  • 使用springmvc的controller层获取到请求的数据方式

    当使用Spring MVC框架时,获取请求数据的方式是通过在controller层方法参数上添加注解来实现,以下是两个获取请求数据的示例: 获取表单提交数据 当用户通过表单提交数据时,我们可以通过使用@RequestParam注解来获取请求的参数值。例如,我们的表单中有一个用户名和密码的输入框,我们可以在controller层方法中通过如下方式获取到这些值:…

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部