iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >如何使用JavaScript和jQuery实现瀑布流
  • 516
分享到

如何使用JavaScript和jQuery实现瀑布流

2024-04-02 19:04:59 516人浏览 八月长安
摘要

这篇文章给大家分享的是有关如何使用javascript和Jquery实现瀑布流的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。用JavaScript实现基本结构:<div&n

这篇文章给大家分享的是有关如何使用javascriptJquery实现瀑布流的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

用JavaScript实现

基本结构:

<div id="main">
 <div class="box">
  <div class="pic"><img src="images/1.jpg" alt=""></div>
 </div>
 <div class="box">
  <div class="pic"><img src="images/2.jpg" alt=""></div>
 </div>
  ...
  ...
  ...
 </div>

基本样式:

*{
 margin: 0px;
 padding: 0px;
 }
 #main{
 position: relative;
 }
 .box{
 padding: 15px 0 0 15px;
 float: left;
 }
 .pic{
 padding: 10px;
 border: 1px solid #ccc;
 border-radius: 5px;
 box-shadow: 0 0 5px #ccc;
 }

思路:

1、获取#main下的所有.box

2、计算页面中图片有几列,并设置页面的宽度

3、找出这几列中高度最小的列

4、从第二行开始,设置图片为相对定位,把一张图片放到高度最小列的下面

5、更新列的高度,重复3、4、5步骤,直至图片加载完

6、根据最后一张图片的位置确定是否继续加载图片(懒加载)

实现:

1、获取#main下的所有.box

  //将main下的所有class为box的元素取出来
  var oParent = document.getElementById(parent);
  var oBox = getByClass(oParent,box);
// 根据class获取元素
 function getByClass(parent,clsname){
  var arr = [];//用来存储获取到的所有class为box的元素
  var oElement = parent.getElementsByTagName('*');
  for(var i=0;i<oElement.length;i++){
  if(oElement[i].className == clsname){
   arr.push(oElement[i]);
  }
  }
  return arr;
 }

2、计算页面中图片有几列,并设置页面的宽度

  //计算整个页面显示的列数(页面宽/box的宽)
  var oBoxW = oBox[0].offsetWidth;
  var cols = Math.floor(document.documentElement.clientWidth/oBoxW);
  //设置main的宽
  oParent.style.CSSText = 'width:' + oBoxW*cols + 'px;margin:0 auto;';

3、找出这几列中高度最小的列

4、从第二行开始,设置图片为相对定位,把一张图片放到高度最小列的下面

5、更新列的高度,重复3、4、5步骤,直至图片加载完

//存储每列的高度
  var hArr = [];
  for(var i=0;i<oBox.length;i++){
  if(i<cols){
   //第一行图片的高度
   hArr.push(oBox[i].offsetHeight);
  }else{
   var minH = Math.min.apply(null,hArr);
   var index = getMinIndex(hArr,minH);
   oBox[i].style.position = "absolute";
   oBox[i].style.top = minH + 'px';
   //oBox[i].style.left = oBoxW*index+'px';
   oBox[i].style.left = oBox[index].offsetLeft + 'px';
   //更新每列的高度
   hArr[index] += oBox[i].offsetHeight;
  }
  }
//获取每列高度最小的索引值
 function getMinIndex(arr,value){
  for(var i in arr){
  if(arr[i] == value){
   return i;
  }
  }
 }

6、根据最后一张图片的位置确定是否继续加载图片(懒加载)

假设是后台给的数据

  //数据
  var dataInt = {'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'}]};  

当滚动条滚动时执行

  //滚动条滚动时
  window.onscroll = function(){
  scrollSlide(dataInt);
  }  

根据最后一张图片的位置,来判断是否进行加载

//判断是否具有了滚条加载数据块的条件
 function checkScrollSlide(parent,clsname){
  var oParent = document.getElementById(parent);
  var oBox = getByClass(oParent,clsname);
  var lastBoxH = oBox[oBox.length-1].offsetTop + Math.floor(oBox[oBox.length-1].offsetHeight/2);
  var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
  var height = document.documentElement.clientHeight || document.body.clientHeight;
  return (lastBoxH < scrollTop + height)? true:false;
 }

加载图片

//滚动条滚动时执行
 function scrollSlide(dataInt){
  ////判断是否具有了滚条加载数据块的条件
  if(checkScrollSlide('main','box')){
  var oParent = document.getElementById('main');
  //将数据块渲染到当前页面的尾部
  for(var i=0;i<dataInt.data.length;i++){
   var oBoxs = document.createElement('div');
   oBoxs.className = 'box';
   oParent.appendChild(oBoxs);
   var oPic = document.createElement('div');
   oPic.className = 'pic';
   oBoxs.appendChild(oPic);
   var oImg = document.createElement('img');
   oImg.src = 'images/' + dataInt.data[i].src;
   oPic.appendChild(oImg);
  }
  waterfall('main','box');
  }

用jQurey实现

用jQuery实现的思路都是一样的,就直接放代码

$(window).on('load',function(){
  waterfall();
  var dataInt={'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'}]};
  $(window).on('scroll',function(){
  scrollSlide(dataInt);
  })
 });
 function waterfall(){
  var $oBox = $('#main>div');
  var oBoxW = $oBox.eq(0).outerWidth();
  var cols = Math.floor($(window).width()/oBoxW);
  $('#main').css({
  'width' : cols * oBoxW,
  'margin' : '0 auto'
  });
  var hArr = [];
  $oBox.each(function(index,value){
  var oBoxH = $oBox.eq(index).height();
  if(index<cols){
   hArr.push(oBoxH);
  }else{
   var minH = Math.min.apply(null,hArr);
   var minHIndex = $.inArray(minH,hArr);
   $(value).css({
   'position' : 'absolute',
   'top': minH + 15,
   'left' : $oBox.eq( minHIndex ).position().left
   });
   hArr[minHIndex] += $oBox.eq(index).height() + 15;
  }
  });
 }
 function checkScrollSlide(){
  var $lastBox = $('#main>div').last();
  var lastBoxH = $lastBox.offset().top + Math.floor($lastBox.height()/2);
  var scrollTop = $(window).scrollTop();
  var clientH = $(window).height();
  return (lastBoxH < scrollTop + clientH) ? true : false;
 }
 function scrollSlide(dataInt){
  if(checkScrollSlide()){
  $.each(dataInt.data,function(index,value){
   var $Box = $('<div>').addClass('box').appendTo('#main');
   var $Pic = $('<div>').addClass('pic').appendTo($Box);
   $('<img>').attr('src','images/' + $(value).attr('src')).appendTo($Pic);
  })
  waterfall();
  }
 }

感谢各位的阅读!关于“如何使用JavaScript和jQuery实现瀑布流”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 如何使用JavaScript和jQuery实现瀑布流

本文链接: https://www.lsjlt.com/news/67492.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用JavaScript和jQuery实现瀑布流
    这篇文章给大家分享的是有关如何使用JavaScript和jQuery实现瀑布流的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。用JavaScript实现基本结构:<div&n...
    99+
    2024-04-02
  • 如何使用jQuery实现瀑布流页面
    这篇文章主要介绍了如何使用jQuery实现瀑布流页面,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下views.pyfrom&nb...
    99+
    2024-04-02
  • jquery如何实现瀑布流布局
    这篇文章将为大家详细讲解有关jquery如何实现瀑布流布局,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.看看效果吧!2.html代码index.html<!DO...
    99+
    2024-04-02
  • JavaScript如何实现瀑布流布局
    这篇文章将为大家详细讲解有关JavaScript如何实现瀑布流布局,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。就是一堆等宽不等高的数据块组成的页面,如图: 现在好多网站...
    99+
    2024-04-02
  • 如何使用HTML和CSS实现瀑布流布局
    如何使用HTML和CSS实现瀑布流布局瀑布流布局(Waterfall Layout)是一种常见的网页布局方式,它可以使网页内容呈现出像瀑布流一样的效果,每一列的高度可以不同,让网页看起来更加有趣和动感。在这篇文章中,我们将介绍如何使用HTM...
    99+
    2023-10-24
    CSS html 瀑布流布局
  • JavaScript如何实现瀑布流布局效果
    这篇文章主要讲解了“JavaScript如何实现瀑布流布局效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript如何实现瀑布流布局效果”吧!如何实现思路:将内容宽度一致,高度...
    99+
    2023-07-06
  • 如何使用Bootstrap实现瀑布流布局
    这篇文章将为大家详细讲解有关如何使用Bootstrap实现瀑布流布局,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、案例介绍瀑布流是近几年流行起来的一种网页布局,视觉表...
    99+
    2024-04-02
  • JQuery实现简单瀑布流布局
    本文实例为大家分享了JQuery实现简单瀑布流布局的具体代码,供大家参考,具体内容如下 分享一个基于JQuery实现的瀑布流布局,效果如下:  实现代码如下,欢迎大家复制...
    99+
    2024-04-02
  • 如何使用纯css实现瀑布流布局
    这篇文章主要为大家展示了“如何使用纯css实现瀑布流布局”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用纯css实现瀑布流布局”这篇文章吧。   1、纯...
    99+
    2024-04-02
  • 如何使用HTML和CSS实现瀑布流图库布局
    如何使用HTML和CSS实现瀑布流图库布局瀑布流布局是一种常见的图库布局方式,它将图片以多列的形式排列,使得页面看起来更加有趣和美观。本文将介绍如何使用HTML和CSS实现瀑布流图库布局,并提供具体的代码示例。一、HTML结构首先,我们需要...
    99+
    2023-10-24
    CSS html 瀑布流布局
  • 如何使用HTML和CSS实现瀑布流网格布局
    瀑布流网格布局是一种常见的布局方式,可以使网页元素呈现出类似瀑布流般的效果,给用户带来更好的视觉体验。本文将介绍如何使用HTML和CSS实现瀑布流网格布局,并提供具体的代码示例。首先,我们需要准备一些HTML结构和CSS样式。下面是一个基本...
    99+
    2023-10-21
    CSS html 瀑布流
  • 如何使用HTML和CSS实现瀑布流卡片布局
    在网页开发中,瀑布流卡片布局是一种常见且炫酷的展示方式。瀑布流布局的特点是卡片呈现不规则的形状,高度和位置会根据内容的多少和屏幕大小自动适应,使页面更具吸引力和互动性。本文将介绍如何使用HTML和CSS实现瀑布流卡片布局,并提供具体的代码示...
    99+
    2023-10-21
    CSS html 瀑布流
  • 如何使用HTML和CSS实现瀑布流图片布局
    如何使用HTML和CSS实现瀑布流图片布局瀑布流图片布局是一种常见的网页设计方式,它通过不规则的列布局将图片呈现在网页上,形成一种自然流动的视觉效果。在本文中,我们将介绍如何使用HTML和CSS实现瀑布流图片布局,并提供具体的代码示例。HT...
    99+
    2023-10-24
    瀑布流布局 (Waterfall layout) HTML 图片布局 (HTML image layout) CSS
  • JavaScript瀑布流怎么实现
    这篇文章主要介绍“JavaScript瀑布流怎么实现”,在日常操作中,相信很多人在JavaScript瀑布流怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript瀑布流怎么实现”的疑惑有所...
    99+
    2023-06-29
  • 如何用js实现瀑布流布局
    这篇“如何用js实现瀑布流布局”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何用js实现瀑布流布局”文章吧。一、前端代码编...
    99+
    2023-07-05
  • JavaScript实现瀑布流布局详解
    目录需求思路代码实现实现效果问题和修正修正后效果总结需求 所谓瀑布流布局,就是含有若干个等宽的列,每一列分别放置图片、视频等,放置的元素都是等宽的,因此可能是不等高的。新的元素到来时...
    99+
    2024-04-02
  • CSS如何实现瀑布流
    小编给大家分享一下CSS如何实现瀑布流,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!瀑布流又称瀑布流式布局,是比较流行的一种网站...
    99+
    2024-04-02
  • Django瀑布流如何实现
    这篇文章主要介绍“Django瀑布流如何实现”,在日常操作中,相信很多人在Django瀑布流如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Django瀑布流如何实现”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-05
  • 如何使用jquery.masonry实现瀑布流效果
    这篇文章给大家分享的是有关如何使用jquery.masonry实现瀑布流效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、分别加载jquery插件与jquery.masonr...
    99+
    2024-04-02
  • 如何使用JS或CSS实现瀑布流布局
    本篇内容主要讲解“如何使用JS或CSS实现瀑布流布局”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用JS或CSS实现瀑布流布局”吧!本着实用精神,我们今天...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作