js实现的美女瀑布流效果代码

这里是“js实现的美女瀑布流效果代码”的完整攻略:

瀑布流效果简介

瀑布流效果(Waterfall Flow)是指像瀑布一样一列接一列的布局方式。随着页面滚动,页面中的图片会自动根据设置好的列数和间距排列,并且会动态加载。瀑布流效果是现代网站中十分流行的一种图片展示方式。

实现方法

瀑布流效果的实现方法比较多,包括纯CSS实现和JS实现。纯CSS实现的瀑布流缺点是浏览器兼容性不佳,使用JS实现较多。

步骤

Step1:引入必要的文件

在HTML文件中,需要引入jQuery库和CSS文件。

<head>
  <meta charset="utf-8">
  <title>瀑布流效果</title>
  <link rel="stylesheet" type="text/css" href="style.css">
  <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
</head>

Step2:定义图片布局盒子

在HTML中定义一个直接包裹图片的盒子,该盒子设置为绝对定位,以便于图片的动态排列。

<div id="wrapper">
  <!-- 图片布局盒子 -->
  <div id="pic-ct"></div>
</div>

Step3:动态加载图片

使用AJAX动态加载图片,并将图片插入到图片布局盒子中。

 function loadPic () {
        var data = [
          {src: 'image/1.jpg'},
          {src: 'image/2.jpg'},
          {src: 'image/3.jpg'},
          ...
          {src: 'image/24.jpg'},
          {src: 'image/25.jpg'}
        ];
        $(window).on('scroll', function () {
          if (isVisible($('#last')) && !isloaded) {
            console.log('scrolling...');
            isloaded = true;
            $.each(data, function(index, value){
              var newImg = $('<img>').attr('src', value.src);
              newImg.on('load', function(){
                $('#pic-ct').append($(this));
                $('#last').removeAttr('id');
                isloaded = false;
              })
            })
          }
        })
      }

该函数中需要定义待动态加载的图片路径列表data,用以从服务器端请求图片资源。scroll监听函数是触发图片动态加载的最终条件,isVisible()函数和isLoaded标识是判断是否到达底部的工具函数。

其中,isVisible()函数的实现如下:

function isVisible ($el) {
    var scrollTop = $(window).scrollTop(),
        windowHeight = $(window).height(),
        offsetTop = $el.offset().top;
    if (scrollTop + windowHeight < offsetTop) {
      return false;
    } else {
      return true;
    }
  }

偏移量(offsetTop)是指元素的顶部到文档的顶部的距离。

Step4:图片布局

最后一个关键步骤,利用JS实现图片的自适应瀑布流排列。

  function renderPic () {
        var colHeight = [],
            colNum = parseInt($('#pic-ct').width()/$('#pic-ct img').outerWidth(true));
        for (var i=0; i<colNum; i++) {
          colHeight.push(0)
        }
        $('#pic-ct img').each(function(){
          var minH = Math.min.apply(null, colHeight),
              minHIndex = colHeight.indexOf(minH);
          $(this).css({
            'position':'absolute',
            'top': minH,
            'left': $('#pic-ct img').outerWidth(true)*minHIndex
          })
          colHeight[minHIndex] += $(this).outerHeight(true);
        })
        // 添加一个边框占位符,避免最后一行图片高度不够
        $('<div>').attr('id', 'last').appendTo($('#pic-ct')).css({
          'width': $('#pic-ct img').outerWidth(true)*colNum,
          'height': '0px'
        })
      }

该函数需要获取到图片数组picArr以及列数colNum,计算每一列当前的图片高度,然后将下一张待定位的图片添加到高度最小的那一列。最后,必须添加一个末界框(border)插入到图片容器中,以改变高度占比。如果没有一个边框占位符,有可能会存在最后一行图片高度未达到屏幕宽度而排版混乱和错位的问题。

瀑布流效果代码演示

此处提供两个瀑布流效果的代码示例,供读者参考。

示例1:返回顶部的多列瀑布流

在线演示

代码实现

示例2:jQuery实现的品牌瀑布流

在线演示

代码实现

可能存在的问题

瀑布流效果使图片更加生动而自然,但同样存在一些问题,例如:

  1. 页面滚动效率低:在获取图片的数据后,打开AJAX开关,在发送AJAX请求到接收响应之间,会有部分时间,而滚动事件瞬间响应,加重了页面负担。
  2. 图片宽度高度不一:瀑布流一般会有许多大小各异的图片,这就会出现在排版时出现错位的问题。
  3. 逐渐加载图片:大量加载图片将会给服务器造成压力,因此逐步加载数据是为了让数据传送量在时间上呈现一个均衡的曲线条,不妨碍用户体验。

此外,瀑布流效果一般用于图片展示区域,开启懒加载能够达到更好的效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现的美女瀑布流效果代码 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript高级程序设计 阅读笔记(二十) js错误处理

    当我们在编写 JavaScript 代码时,难免会出现错误,这时我们需要做出适当的处理。本篇阅读笔记将讲解 JavaScript 错误处理的相关知识。 错误处理相关术语 异常 在运行 JavaScript 的时候,一旦出现了错误,便会抛出一个异常。 try-catch 语句 为了避免程序出现异常而终止,我们可以使用 try-catch 语句来捕捉异常。try…

    JavaScript 2023年5月27日
    00
  • 基于Marquee.js插件实现的跑马灯效果示例

    下面是关于“基于Marquee.js插件实现的跑马灯效果示例”的完整攻略。 1. 插件简介 Marquee.js 是一款基于 jQuery 插件的跑马灯效果插件。它可以实现多种跑马灯效果,包括左右滚动、上下滚动、淡入淡出、文字逐次替换等。 2. 安装和引用 你可以通过以下方式安装 Marquee.js 插件: npm install marquee-js 或…

    JavaScript 2023年6月11日
    00
  • JS异步代码单元测试之神奇的Promise

    JS异步代码单元测试一直是开发人员要面对的挑战。为了解决这个问题,Promise异步编程模式被引入到JavaScript中,因其简单、灵活和可重用性而受到广泛认可。在本攻略中,我们将深入探讨如何在单元测试中使用Promise,以及如何跟踪异步代码逻辑和处理可能的异步回调。 异步单元测试面临的问题 在传统的单元测试中,我们可以通过直接调用函数、对函数输出结果进…

    JavaScript 2023年5月28日
    00
  • js实现动态显示时间效果

    一、使用JavaScript获取当前时间 在JavaScript中,可以使用new Date()方法创建一个Date对象,该对象获取到的是当前电脑系统的时间。可以将该对象保存到一个变量中,用于后续操作。 示例代码: var currentTime = new Date(); 二、格式化时间 为了在页面中展示时间,需要对时间进行格式化。JavaScript提供…

    JavaScript 2023年5月27日
    00
  • js几个验证函数代码

    请允许我为您提供一份“JS几个验证函数代码”的完整攻略。 1. 概述 在网页开发中,往往需要在表单中添加一些数据验证功能,用于对用户输入的数据进行验证,确保数据的正确性。下面介绍几个常用的JS数据验证函数,分别对应验证电话号码、邮箱地址、以及身份证号码等。 2. 函数 2.1 验证电话号码 通过正则表达式判断输入的字符串是否为合法的电话号码,其中 ^[1][…

    JavaScript 2023年6月10日
    00
  • javascript object array方法使用详解

    好的!那我来给您介绍一下“JavaScript Object Array 方法使用详解”的完整攻略。 JavaScript Object Array 方法详解 概述 在 JavaScript 开发中,数组是常用的一种数据类型,我们经常需要对数组进行一些操作。在操作数组时,JavaScript 提供了一些内置的对象方法,这些方法可以帮助我们完成数组的操作。本篇…

    JavaScript 2023年5月27日
    00
  • JS实现添加缓动画的方法

    下面是JS实现添加缓动动画的方法的完整攻略: 什么是缓动动画? 缓动动画指的是在动画过程中,物体的速度从快到慢,或者从慢到快,而不是始终以相同的速度运动。缓动动画通常可以提高用户体验,使动画看起来更平滑、自然。 实现缓动动画的方法 使用JS实现缓动动画可以有多种方法,下面介绍其中两种。 方法一:简单的缓动动画实现 简单的缓动动画实现方法比较容易理解,下面的代…

    JavaScript 2023年6月10日
    00
  • js 距离某一时间点时间是多少实现代码

    下面是完整的攻略: 前置知识 在实现“js 距离某一时间点时间是多少”之前,需要掌握以下知识: 获取当前时间的方法(如 Date.now()、new Date() 等) 将时间字符串转换为时间戳的方法(如 Date.parse()、new Date(str).getTime() 等) 时间戳的概念 计算时间差的方法(如使用 – 运算符,或者使用 Date 对…

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