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日

相关文章

  • 滑动验证码的设计与理解

    下面是“滑动验证码的设计与理解”的完整攻略。 1. 什么是滑动验证码 滑动验证码是一种常见的web安全验证形式,通常用于防止垃圾注册、恶意攻击等行为。用户需要通过滑动图片来证明自己是真实的人类,而不是机器人。 2. 滑动验证码的设计 2.1 验证码的生成 滑动验证码的生成通常分为两部分。首先,服务器会生成一张包含随机图形的图片或拼图,然后将图片进行加密处理,…

    jquery 2023年5月27日
    00
  • jQWidgets jqxDropDownButton focus()方法

    jQWidgets jqxDropDownButton focus()方法 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI组件和工具包括表格、下拉等。jqxDropDownButton是jQWidgets的组件之一,用于创建下拉按钮。focus()方法是jqxDropDownButton的一个方法,用于将焦点设置到下拉按钮上。 foc…

    jquery 2023年5月9日
    00
  • jquery validate 自定义验证方法介绍 日期验证

    以下是关于“jQuery Validate自定义验证方法介绍 日期验证”的详细攻略。 一、基本介绍 jQuery Validate是一款非常流行的验证表单插件。除了内置的验证方法外,我们还可以通过自定义验证方法来实现更加丰富的表单验证功能。 jQuery Validate中自定义验证方法基本都遵循以下格式: $.validator.addMethod(&qu…

    jquery 2023年5月28日
    00
  • jQWidgets jqxTreeGrid checkboxes属性

    jQWidgets jqxTreeGrid checkboxes 属性 jqxTreeGrid 是 jQWidgets 提供的一个树形表格组件,它可以展示层级结构的数据支持多种交互。jqxGrid 提供 checkboxes 属性,用于在树形表格中添加复选框。 checkboxes 属性 checkboxes 属性用于在树形格中添加选框。该属性有两个可选值:…

    jquery 2023年5月11日
    00
  • EasyUI jQuery树形部件

    EasyUI jQuery树形部件完整攻略 简介 EasyUI jQuery树形部件是一种基于jQuery和EasyUI框架的树形组件,它可以方便地构建树形结构的UI界面,支持异步加载、拖拽、编辑等常见的树形功能。本攻略将介绍如何使用EasyUI jQuery树形部件,包括配置、数据加载、事件处理、节点操作等方面的内容。 配置 EasyUI jQuery树形…

    jquery 2023年5月13日
    00
  • jQuery UI Autocomplete search()方法

    jQuery UI 的 Autocomplete 组件提供了一个 search() 方法,该方法允许您手动触发 Autocomplete 的搜索操作。在本教程中,我们将详细介绍 Autocomplete 的 search() 方法使用方法。 search() 方法基本语法如下: $( ".selector" ).autocomplete(…

    jquery 2023年5月11日
    00
  • 使用jQuery清空file文件域的解决方案

    以下是使用jQuery清空file文件域的解决方案的完整攻略: 1. 问题分析 在网站中,我们使用了<input type=”file”>标签,让用户可以选择上传本地文件。但是有时候,我们需要让用户可以清空已选中的文件,重新选择一个文件。因为默认情况下,文件输入框是无法被清空的。那么如何使用jQuery来清空文件域呢? 2. 解决方案 实现文件域…

    jquery 2023年5月27日
    00
  • 如何在DOM中存储数据

    在DOM中存储数据可以使用多种方法,包括使用属性、数据属性、自定义属性、数据集等。以下是如何在DOM中存储数据的完整攻略: 步骤一:选择元素 首先需要选择要存储数据的元素。可以使用CSS选择器选择元素。以下是示例: // Select element to store data in var myElement = document.getElementBy…

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