jQuery实现瀑布流布局详解(PC和移动端)

jQuery实现瀑布流布局详解(PC和移动端)

瀑布流布局是什么

瀑布流布局又称 Pinterest 布局,是一种展示方式,将内容展示成多列、高度不定的瀑布流风格,适用于展示图片、文章等内容。Pinterest 就是一个典型的瀑布流网站。

实现瀑布流布局的核心原理

实现瀑布流布局的核心原理是通过 JavaScript 动态计算出每一列的高度,然后将下一个元素按照高度最小的列进行插入。

如何使用 jQuery 实现瀑布流布局

步骤一:定义 HTML 结构

首先,定义一个容器,多个元素放置在容器内。每个元素内可以放置图片、文字或其他 DOM 元素。

<div id="container">
    <div class="box">
        <div class="content">
            <!-- 元素内容 -->
        </div>
    </div>
    ...
</div>

步骤二:定义 CSS 样式

首先,给容器设置基本样式:

#container {
    position: relative;
    margin: 0 auto;
    width: 960px;
}

然后,给每个元素设置样式:

.box {
    position: absolute;
    /* 这里将 left 和 top 设置为 0 为了方便后面 js 代码调用 */
    left: 0;
    top: 0;
    width: 230px;
    margin: 10px;
    /* 元素的背景需要透明,否则会覆盖前面的元素 */
    background-color: rgba(0, 0, 0, 0);
}

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

$(window).on('load',function() {
    // 取得容器和子元素
    var $container = $('#container');
    var $boxs = $container.children('.box');
    // 定义瀑布流列数和间距
    var boxWidth = $boxs.eq(0).width() + 20;
    var windowWidth = $(window).width();
    var cols = Math.floor(windowWidth / boxWidth);

    var colHeightArr = [];
    $boxs.each(function(index, value) {
        var boxHeight = $(value).height() + 20;
        if (index < cols) {
            colHeightArr[index] = boxHeight;
        } else {
            var minHeight = Math.min.apply(null, colHeightArr);
            var minIndex = $.inArray(minHeight, colHeightArr);
            $(value).css({
                'position': 'absolute',
                'top': minHeight,
                'left': minIndex * boxWidth
            });
            colHeightArr[minIndex] += boxHeight;
        }
    });
});

步骤四:处理容器的高度

由于元素是绝对定位的,需要根据内容自适应高度,最后要计算总高度,让容器撑起来。

// 取得高度最大列的高度作为容器高度
var maxHeight = Math.max.apply(null, colHeightArr);
$container.height(maxHeight);

相关示例

示例一:使用 Ajax 加载数据

$(window).on('scroll', function() {
    if (checkScrollSlide) {
        $.ajax({
            url: './getlist.php',
            dataType: 'json'
        }).done(function(data) {
            $.each(data, function(index,value) {
                var $newBox = $("<div>").addClass('box').appendTo($('#container'));
                $("<div>").addClass('content').appendTo($newBox).html(value.imgSrc);
            });
            waterFall();
        });
    }
});

function checkScrollSlide() {
    var $lastBox = $('#container>.box').last();
    var lastBoxDis = $lastBox.offset().top + Math.floor($lastBox.height() / 2);
    var scrollTop = $(window).scrollTop();
    var documentHeight = $(document).height();
    return (lastBoxDis < scrollTop + documentHieght) ? true : false;
}

示例二:响应式布局

对于移动设备,需要以屏幕宽度为瀑布流列数做计算。

function setWaterFall() {
    var $container = $('#container');
    var $boxs = $container.children('.box');
    var windowWidth = $(window).width();
    var boxWidth = $boxs.eq(0).outerWidth(true);
    var cols = Math.floor(windowWidth / boxWidth);

    $container.width(cols * boxWidth);
    var colHeightArr = [];
    $boxs.each(function (index, value) {
        var boxHeight = $(value).outerHeight(true);
        if (index < cols) {
            colHeightArr[index] = boxHeight;
        } else {
            var minHeight = Math.min.apply(null, colHeightArr);
            var minIndex = $.inArray(minHeight, colHeightArr);
            $(value).css({
                'position': 'absolute',
                'top': minHeight,
                'left': minIndex * boxWidth
            });
            colHeightArr[minIndex] += boxHeight;
        }
    });
    // 取得高度最大列的高度作为容器高度
    var maxHeight = Math.max.apply(null, colHeightArr);
    $container.height(maxHeight);
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery实现瀑布流布局详解(PC和移动端) - Python技术站

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

相关文章

  • jQWidgets jqxTree源属性

    jQWidgets jqxTree 源属性 jqxTree 是 jQWidgets 提供的一个树形组件,它可以展示层级结构的数据支持多种交互。jqxTree 提供了 source 属性,用于设置树形组件的数据源。 source 属性 source 属性用于设置树形组件的数据源。数据源可以是一个数组,也可以是一个 URL,用于从服务器获取数据。 $(‘#tre…

    jquery 2023年5月11日
    00
  • Java中Spring WebSocket详解

    Java中Spring WebSocket详解 WebSockets是一种全双工、持久性的协议,能够在浏览器和服务器之间创建一个互动会话。Spring WebSocket简化了在Spring应用程序中使用WebSockets的流程。 使用Spring WebSocket 以下是使用Spring WebSocket的步骤: 在pom.xml文件中添加sprin…

    jquery 2023年5月27日
    00
  • jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)

    jQuery不间断滚动效果是网页中常见的一种滚动方式,其可以模拟百度新闻支持文字、图片、垂直滚动等效果,非常实用。下面就是一份完整的攻略,包含了实现该滚动效果的详细步骤,以及示例代码。 1. HTML结构 首先,我们需要在HTML中设置一个容器,并且在容器中插入滚动元素。以下是一个简单的HTML结构示例: <div id="scrollBox…

    jquery 2023年5月28日
    00
  • jQWidgets jqxComboBox enableSelection属性

    以下是关于“jQWidgets jqxComboBox enableSelection属性”的完整攻略,包含两个示例说明: 简介 jqxComboBox 控件的 enableSelection 属性用于启用或禁用下拉列表中的选项选择。 完整攻略 以下是 jqxComboBox 控件 enableSelection 属性的完整攻略: 定义 enableSele…

    jquery 2023年5月11日
    00
  • jQuery dateRangePicker插件使用方法详解

    jQuery dateRangePicker插件使用方法详解 介绍 jQuery dateRangePicker是一个时间范围选择器插件,它提供了很多功能和选项来自定义时间范围选择器,可以用于各种类型的应用程序和网站。 安装 安装jQuery dateRangePicker插件依赖于jQuery,如果你没有引入jQuery,那么你需要先引入jQuery。可以…

    jquery 2023年5月28日
    00
  • jQuery Mobile Pagecontainer beforehide事件

    jQuery Mobile是一个基于jQuery的开源移动端开发框架,它提供了大量的API和组件,方便我们快速地开发移动端应用。其中,jQuery Mobile Pagecontainer API提供了一系列事件和方法,方便我们控制页面容器,实现一些页面级别的操作。 其中,beforehide事件是一个重要的事件,它在页面隐藏之前触发,可以用来进行一些数据的…

    jquery 2023年5月12日
    00
  • 理解jquery ajax中的datatype属性选项值

    下面我来详细讲解一下“理解 jQuery Ajax 中的 dataType 属性选项值”。 dataType选项简介 在 jQuery Ajax 中,我们可通过 dataType 属性来指定预期返回的数据类型。这个选项告诉 jQuery 服务器响应意味着什么。当从服务器返回数据时,jQuery 将自动根据 dataType 的值将响应数据转换为相应的格式。d…

    jquery 2023年5月28日
    00
  • jQWidgets jqxRadioButton boxSize 属性

    以下是关于 jQWidgets jqxRadioButton 组件中 boxSize 属性的详细攻略。 jQWidgets jqxRadioButton boxSize 属性 jQWidgets jqx 组件的 boxSize 属性用于设置单选按钮的大小。 语法 // 设置单选按钮的大小 $(‘#radioButtonjqxRadioButton({ box…

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