欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript實(shí)現(xiàn)瀑布流布局的3種方式

 更新時(shí)間:2020年12月27日 11:26:09   作者:杏子_1024  
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)瀑布流布局的3種方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

前言

今天逛閑魚(yú)的時(shí)候觀察到每一行的高度不是相同的,經(jīng)了解才知道原來(lái)這是一種瀑布流布局,感覺(jué)挺有意思,于是決定研究一下,在網(wǎng)上也找了一些方案,實(shí)現(xiàn)瀑布流大概有3種方式。

一、JS 實(shí)現(xiàn)瀑布流

思路分析

1、瀑布流布局的特點(diǎn)是等寬不等高。
2、為了讓最后一行的差距最小,從第二行開(kāi)始,需要將圖片放在第一行最矮的圖片下面,以此類推。
3、父元素設(shè)置為相對(duì)定位,圖片所在元素設(shè)置為絕對(duì)定位。然后通過(guò)設(shè)置 top 值和 left 值定位每個(gè)元素。

代碼實(shí)現(xiàn)

<!DOCTYPE html>
<html>
<head>
 <style>
 .box {
  width: 100%;
  position:relative;
 }
 .item {
  position: absolute;
 }
 .item img{
  width: 100%;
  height:100%;
 }
 </style>
</head>
<body>
<div class="box">
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
</div>
</body>
<script src="jquery.min.js"></script>
<script>
 function waterFall() {
 // 1 確定圖片的寬度 - 滾動(dòng)條寬度
 var pageWidth = getClient().width-8;
 var columns = 3; //3列
 var itemWidth = parseInt(pageWidth/columns); //得到item的寬度
 $(".item").width(itemWidth); //設(shè)置到item的寬度
 var arr = [];
 $(".box .item").each(function(i){
  var height = $(this).find("img").height();
  if (i < columns) {
  // 2 第一行按序布局
  $(this).css({
   top:0,
   left:(itemWidth) * i+20*i,
  });
  //將行高push到數(shù)組
  arr.push(height);
  } else {
  // 其他行
  // 3 找到數(shù)組中最小高度 和 它的索引
  var minHeight = arr[0];
  var index = 0;
  for (var j = 0; j < arr.length; j++) {
   if (minHeight > arr[j]) {
   minHeight = arr[j];
   index = j;
   }
  }
  // 4 設(shè)置下一行的第一個(gè)盒子位置
  // top值就是最小列的高度
  $(this).css({
   top:arr[index]+30,//設(shè)置30的距離
   left:$(".box .item").eq(index).css("left")
  });

  // 5 修改最小列的高度
  // 最小列的高度 = 當(dāng)前自己的高度 + 拼接過(guò)來(lái)的高度
  arr[index] = arr[index] + height+30;//設(shè)置30的距離
  }
 });
 }
 //clientWidth 處理兼容性
 function getClient() {
 return {
  width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
  height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
 }
 }
 // 頁(yè)面尺寸改變時(shí)實(shí)時(shí)觸發(fā)
 window.onresize = function() {
 //重新定義瀑布流
 waterFall();
 };
 //初始化
 window.onload = function(){
 //實(shí)現(xiàn)瀑布流
 waterFall();
 }
</script>
</html>

效果如下

二、column 多行布局實(shí)現(xiàn)瀑布流

思路分析:

column 實(shí)現(xiàn)瀑布流主要依賴兩個(gè)屬性。
一個(gè)是 column-count 屬性,是分為多少列。
一個(gè)是 column-gap 屬性,是設(shè)置列與列之間的距離。

代碼實(shí)現(xiàn):

<!DOCTYPE html>
<html>
<head>
 <style>
 .box {
  margin: 10px;
  column-count: 3;
  column-gap: 10px;
 }
 .item {
  margin-bottom: 10px;
 }
 .item img{
  width: 100%;
  height:100%;
 }
 </style>
</head>
<body>
<div class="box">
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
</div>
</body>

效果如下:

三、flex 彈性布局實(shí)現(xiàn)瀑布流

思路分析:

flex 實(shí)現(xiàn)瀑布流需要將最外層元素設(shè)置為 display: flex,即橫向排列。然后通過(guò)設(shè)置 flex-flow:column wrap 使其換行。設(shè)置 height: 100vh 填充屏幕的高度,來(lái)容納子元素。每一列的寬度可用 calc 函數(shù)來(lái)設(shè)置,即 width: calc(100%/3 - 20px)。分成等寬的 3 列減掉左右兩遍的 margin 距離。

代碼實(shí)現(xiàn):

<!DOCTYPE html>
<html>
<head>
 <style>
 .box {
  display: flex; 
  flex-flow:column wrap;
  height: 100vh;
 }
 .item {
  margin: 10px;
  width: calc(100%/3 - 20px);
 }
 .item img{
  width: 100%;
  height:100%;
 }
 </style>
</head>
<body>
<div class="box">
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="show.jpg" alt="" />
 </div>
 <div class="item">
 <img src="cloth.jpg" alt="" />
 </div>
 <div class="item">
 <img src="banner.jpg" alt="" />
 </div>
</div>
</body>

效果如下:

四、3種方式對(duì)比

如果只是簡(jiǎn)單的頁(yè)面展示,可以使用 column 多欄布局和 flex 彈性布局。如果需要?jiǎng)討B(tài)添加數(shù)據(jù),或者動(dòng)態(tài)設(shè)置列數(shù),就需要使用到 JS + jQuery。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 調(diào)用js時(shí)ie6和ie7,ff的區(qū)別

    調(diào)用js時(shí)ie6和ie7,ff的區(qū)別

    主要考慮到一些瀏覽器的兼容性問(wèn)題,這個(gè)是經(jīng)常遇到的,大家可以參考下。
    2009-08-08
  • JS去掉字符串中所有的逗號(hào)

    JS去掉字符串中所有的逗號(hào)

    這篇文章主要介紹了JS去掉字符串中所有的逗號(hào),需要的朋友可以參考下
    2017-10-10
  • JS是否可以跨文件同時(shí)控制多個(gè)iframe頁(yè)面的應(yīng)用技巧

    JS是否可以跨文件同時(shí)控制多個(gè)iframe頁(yè)面的應(yīng)用技巧

    這篇文章給大家詳細(xì)介紹了JS是否可以跨文件同時(shí)控制多個(gè)iframe頁(yè)面的應(yīng)用技巧,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2007-12-12
  • javascript中call和apply的用法示例分析

    javascript中call和apply的用法示例分析

    這篇文章主要介紹了javascript中call和apply的用法示例分析,非常的詳細(xì),需要的朋友可以參考下
    2015-04-04
  • js 中將多個(gè)逗號(hào)替換為一個(gè)逗號(hào)的代碼

    js 中將多個(gè)逗號(hào)替換為一個(gè)逗號(hào)的代碼

    這篇文章主要介紹了js 中將多個(gè)逗號(hào)替換為一個(gè)逗號(hào)的代碼,需要的朋友可以參考下
    2014-06-06
  • 解決URL地址中的中文亂碼問(wèn)題的辦法

    解決URL地址中的中文亂碼問(wèn)題的辦法

    這篇文章主要介紹了解決URL地址中的中文亂碼問(wèn)題的辦法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 詳解Webwork中Action 調(diào)用的方法

    詳解Webwork中Action 調(diào)用的方法

    這篇文章主要介紹了詳解Webwork中Action 調(diào)用的方法的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • 最新評(píng)論