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

yizhihongxing

这里是“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交换变量的常用方法小结【4种方法】

    当你需要交换两个变量时,有多种方法可以实现。在 JavaScript 中,我们可以使用以下四种常用方法来交换两个变量: 使用第三个变量 使用加减法 使用异或运算 使用 ES6 的解构赋值 下面我们将详细解释每种方法并附上示例。 方法1:使用第三个变量 使用第三个临时变量来存储其中一个变量的值,然后将另一个变量的值赋值给第一个变量,最后将第三个变量的值赋值给第…

    JavaScript 2023年5月19日
    00
  • Javascript入门学习第六篇 js DOM编程第2/2页

    关于“Javascript入门学习第六篇 js DOM编程第2/2页”的攻略,我会从以下几个方面进行详细讲解: DOM编程是什么? 如何获取DOM元素? 如何修改DOM元素的属性和内容? 如何动态创建或删除DOM元素? 示例说明。 首先我们来了解一下什么是DOM编程。 DOM编程是什么? DOM全称为“Document Object Model”,翻译为文档…

    JavaScript 2023年5月27日
    00
  • JavaScript中如何通过arguments对象实现对象的重载

    在JavaScript中,函数本身不支持重载,即同名函数在定义时只会保留最后一次定义。但是通过arguments对象可以实现函数的重载,即同名函数接收不同数量或类型的参数时,会调用不同的实现。 具体的步骤如下: 1.首先在函数内判断调用时传递的参数数量和类型,可以使用arguments对象实现。arguments对象包含了调用函数时传递的所有参数,通过它可以…

    JavaScript 2023年6月11日
    00
  • 转义字符(\)对JavaScript中JSON.parse的影响概述

    “转义字符(\)对JavaScript中JSON.parse的影响概述”攻略: 在JavaScript中,可以使用JSON.parse方法将JSON字符串转换成JSON对象。但是,在某些情况下,JSON字符串中的特殊字符可能会导致转换失败。为了解决这个问题,我们可以使用转义字符来处理特殊的字符。 转义字符的作用 转义字符是一种特殊的字符,用于处理在JSON字…

    JavaScript 2023年5月27日
    00
  • javascript 在线文本编辑器实现代码

    实现一个 JavaScript 在线文本编辑器的具体思路如下: 创建一个文本输入框,接受用户输入的文本; 创建一个可编辑的文本区域,将用户输入的文本显示在此区域内; 设置文本区域的样式和属性,使之可编辑; 当用户在文本区域中进行编辑操作时,通过 JavaScript 监听用户的输入操作,并实时更新显示内容; 将编辑后的文本内容提交到后台进行保存。 下面是实现…

    JavaScript 2023年6月10日
    00
  • JS实现获取当前URL和来源URL的方法

    获取当前URL和来源URL是一项常见的技术需求,本文将介绍JS实现该功能的方法。 获取当前URL的方法 获取当前URL可以使用window.location属性,该属性包含了URL的各种组成部分,如协议、主机名、路径等。示例代码如下: var currentUrl = window.location.href; console.log(currentUrl)…

    JavaScript 2023年5月28日
    00
  • js实现删除json中指定的元素

    下面是如何实现删除JSON中指定元素的攻略: 1. 找到要删除的元素 在删除JSON中指定元素时,首先要找到要删除的元素。我们可以使用JavaScript的filter()或splice()方法来操作JSON对象。 利用filter()方法: let data = [ {id: 1, name: ‘Alice’}, {id: 2, name: ‘Bob’},…

    JavaScript 2023年5月27日
    00
  • JavaScript的深拷贝与浅拷贝

    一句话来解释什么是深浅拷贝,B拷贝A,当修改A,B如果变化,就是浅拷贝,反之就是深拷贝。 基本原理: 1.递归函数2.对象内的值都是简单数据类型时 直接进行赋值3.当我们遇到数组和对象时,可以再次调用函数,利用递归去拷贝数组和对象内的每个值4.先数组 后对象  因为数组也是对象  下面是一个实现深拷贝的函数: 1 function deepClone(obj…

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