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日

相关文章

  • 表单提交验证类

    下面是关于表单提交验证类的完整攻略。 什么是表单提交验证类 表单提交验证类是一种PHP后端验证机制,用于验证用户通过表单提交的数据是否符合预期的格式和规范。通过对表单提交的数据进行验证,可以有效地防止恶意提交和错误数据的输入。 表单提交验证类的工作原理 表单提交验证类的工作原理包括以下几步: 接收表单提交的数据。 定义验证规则。包括验证规则名称、验证规则类型…

    JavaScript 2023年6月10日
    00
  • JS 日期操作代码,获取当前日期,加一天,减一天

    JS是一种强大而灵活的脚本语言,用来操作日期也很简单。下面是获取当前日期、加一天、减一天的完整攻略。 获取当前日期 获取当前日期很简单,使用JS内置对象Date即可。 var today = new Date(); console.log(today); 上述代码会输出当前日期的完整信息,包括年月日、时分秒和时区等详细信息。 输出结果示例: Tue Aug …

    JavaScript 2023年5月27日
    00
  • JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例

    JavaScript原生xmlHttp与jQuery的ajax方法都是用来进行异步数据请求的工具。其中,ajax方法还支持多种数据格式,包括json格式。下面,我们将详细讲解JavaScript原生xmlHttp与jQuery的ajax方法json数据格式的使用攻略。 1. JavaScript原生xmlHttp的使用方法 1.1 创建XMLHttpRequ…

    JavaScript 2023年5月27日
    00
  • Electron vue的使用教程图文详解

    Electron Vue的使用教程图文详解 Electron Vue是一款基于Electron和Vue的框架,可以用于快速构建桌面应用。本文将详细讲解如何使用Electron Vue构建桌面应用程序。 前置条件 在开始使用Electron Vue之前,需要具备以下技能和工具: 基本的HTML、CSS和JavaScript技能 Vue.js的基础知识 Node…

    JavaScript 2023年6月11日
    00
  • 深入了解Javascript的事件循环机制

    深入了解JavaScript的事件循环机制 JavaScript 是一门单线程语言,这意味着在 JavaScript 中,代码是按顺序执行的,只有前一个任务执行完成后,才会执行下一个任务。但是 JavaScript 中有许多异步操作,如定时器、事件监听器、网络请求等,这些操作不会阻塞代码的执行,可以同时执行。那么在 JavaScript 中是如何处理异步操作…

    JavaScript 2023年5月28日
    00
  • 解析页面加载与js函数的执行 onload or ready

    解析页面加载与js函数的执行 onload or ready 页面加载过程 当浏览器加载一个页面时,会按照以下步骤逐步完成页面的加载: 浏览器通过DNS解析获取目标网站的IP地址 浏览器向服务器发出请求,获取HTML文件 浏览器开始解析HTML,构建DOM树 遇到CSS和JS文件时,浏览器会解析它们,并执行其中的代码 解析完成后,浏览器构建出渲染树 渲染树和…

    JavaScript 2023年6月11日
    00
  • js每隔5分钟执行一次ajax请求的实现方法

    要实现JS每隔5分钟执行一次ajax请求,可以借助JavaScript的定时器(Timer)机制,可以使用setInterval方法来周期性的调用Ajax请求的方法。下面是具体的实现步骤: 在HTML页面上引入jQuery库(或其它ajax库) <script src="https://code.jquery.com/jquery-3.5.1…

    JavaScript 2023年6月11日
    00
  • Web开发之JavaScript

    Web开发之JavaScript 一、JavaScript入门 1. JavaScript是什么 JavaScript是一种广泛应用于Web开发的脚本语言,主要用于为网页添加动态效果、实现交互功能等。 2. 学习JavaScript的基本要素 (1)掌握HTML和CSS的基本用法 在使用JavaScript进行Web开发时,HTML和CSS是最基本的语言。 …

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