校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > HTML+CSS+JS實現圖片的瀑布流布局的示例代碼

HTML+CSS+JS實現圖片的瀑布流布局的示例代碼

熱門標簽:中國地圖標注城市的 通遼地圖標注app 高德地圖標注廁所 江西ai電銷機器人如何 地圖標注員工作內容 智能語音電銷機器人客戶端 威海語音外呼系統平臺 西安金倫外呼系統 地圖標注沿海城市房價

前言

瀑布流布局簡而言之就是類似瀑布流的布局嘛,這么一講大家可能還是不是了解的很明白,來來來,那現在我給大家上一個常見的實例:

相信大家在百度上搜索圖片時的時候,網頁圖片的布局就是這樣子的吧,什么?你還是不清楚瀑布流,那咱就再我看一個那沒關系,淘寶大家應該再熟悉不過了吧!

我們可以發現圖中每個商品框的高度不同的,因此導致我們的商品圖片的高度布局都不在一個高度上。在百度搜索圖片的時候我們發現每張圖片的寬度都是不一樣的那為什么所用圖片的寬度它能剛剛好的占滿一行呢?

這就是我今天今天教大家的布局方式——waterfall 布局,那該怎么實現呢?那我們就不多說啦,直接上干貨!

一、總體效果

瀑布流的搭建完的效果如下:

 

二、HTML+CSS簡單布局

首先大家在網上搜索一些圖片或者用一下自己喜歡的圖片均可,用html搭建好框架網頁的框架將圖片存放好,我們這里使用的了20張圖為例。其次使用html+css實現一個簡單的布局,這有個關鍵的步驟:我們對比上面百度和淘寶頁面的瀑布流布局就不難發現,要實現瀑布流所有圖片都得有個相同的高度或者高度。因此我們這就給所用照片設置一個固定的寬度,但不限定的圖片的高度保證每圖片都按其原始比例完整展示出來。

HTML,CSS代碼如下:

css代碼

*{
          margin: 0;
          padding: 0;
      }
      #container{
          position: relative;
      }
      .box{
          float: left;/* 給每個存放照片box設置為浮動元素,讓所有的圖片浮動到網頁的第一行*/
          padding: 5px;
      }
      .box-img{
          width: 150px;
          padding: 5px;
          border: 1px solid #ccc;
          box-shadow: 0 0 5px #ccc;
          border-radius: 5px;
      }
      .box-img img {
          width: 100%;
          height: auto;
      }

html代碼

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>js 瀑布流</title>
 <link rel="stylesheet" href="./index.css">
</head>
<body>
  <div id="container">
    <div class="box">
      <div class="box-img">
        <img src="./img/1.jpg" alt="">
      </div>
    </div>
    <div class="box">
      <div class="box-img">
        <img src="./img/2.jpg" alt="">
      </div>
    </div>
    <div class="box">
      <div class="box-img">
        <img src="./img/3.jpg" alt="">
      </div>
    </div>
    <div class="box">
      <div class="box-img">
        <img src="./img/4.jpg" alt="">
      </div>
    </div>
    <div class="box">
      <div class="box-img">
        <img src="./img/5.jpg" alt="">
      </div>
    </div>
    <div class="box">
      <div class="box-img">
        <img src="./img/6.jpg" alt="">
      </div>
    </div>
    <div class="box">
      <div class="box-img">
        <img src="./img/7.jpg" alt="">
      </div>
    </div>
    <div class="box">
      <div class="box-img">
        <img src="./img/8.jpg" alt="">
      </div>
    </div>
    <div class="box">
      <div class="box-img">
        <img src="./img/9.jpg" alt="">
      </div>
    </div>
    <div class="box">
      <div class="box-img">
        <img src="./img/10.jpg" alt="">
      </div>
    </div>
    <div class="box">
        <div class="box-img">
          <img src="./img/1.jpg" alt="">
        </div>
      </div>
      <div class="box">
        <div class="box-img">
          <img src="./img/2.jpg" alt="">
        </div>
      </div>
      <div class="box">
        <div class="box-img">
          <img src="./img/3.jpg" alt="">
        </div>
      </div>
      <div class="box">
        <div class="box-img">
          <img src="./img/4.jpg" alt="">
        </div>
      </div>
      <div class="box">
        <div class="box-img">
          <img src="./img/5.jpg" alt="">
        </div>
      </div>
      <div class="box">
        <div class="box-img">
          <img src="./img/6.jpg" alt="">
        </div>
      </div>
      <div class="box">
        <div class="box-img">
          <img src="./img/7.jpg" alt="">
        </div>
      </div>
      <div class="box">
        <div class="box-img">
          <img src="./img/8.jpg" alt="">
        </div>
      </div>
      <div class="box">
        <div class="box-img">
          <img src="./img/9.jpg" alt="">
        </div>
      </div>
      <div class="box">
        <div class="box-img">
          <img src="./img/10.jpg" alt="">
        </div>
      </div>
  </div>
  <script src="./index.js"></script>
</body>
</html>

html和css修飾后的網頁的效果是怎樣的的呢?

我們給每個盒子都使用了一個float:left屬性,讓圖片脫離文檔來到網頁的最上端,但是圖片過多時有部分圖片被擠到了第二行,可是他們并沒有像我們設想的那樣像瀑布式的排列,那我們該怎么實現呢,這時我們的的JS就要派上用場啦。

三、JS實現后續布局

通過js實現將第一行后的圖片排列在緊湊的排列在每一列中

代碼如下代碼(附帶有詳細注釋):

window.onload = function() {
    imgLocation('container', 'box')
  }
  
  // 獲取到當前有多少張圖片要擺放
  function imgLocation(parent, content) {
    // 將containerd下所有的內容全部取出
    var cparent = document.getElementById(parent)  //獲取container盒子的標簽
    var ccontent = getChildElemnt(cparent, content)//圖片時放在container盒子里的box盒子里的,因此我們還需要定義一個函數getChildElemnt()獲取出box里的圖片
    
    var imgWidth = ccontent[0].offsetWidth//獲取css中我們給每張圖片設置的固定寬度
    var num = Math.floor(document.documentElement.clientWidth / imgWidth) //獲取瀏覽器body的寬度計算最多能放幾張我們的圖片
    cparent.style.cssText = `width: ${imgWidth * num} px`
  
    //擺放圖片
    var BoxHeightArr = [] 
    for (var i = 0; i < ccontent.length; i++) { 
      if (i < num) {  //我們先將第一行擺滿
        BoxHeightArr[i] = ccontent[i].offsetHeight //這里我們通過BoxHeightArr[]數組存放每列的高度
      } else { //剩下的圖片我們依次次優先選擇擺在高度最低的一列后面
        var minHeight = Math.min.apply(null, BoxHeightArr) //通過將Math.min()中求最小值的方法應用到數組中,求出高度最低的列
        var minIndex = getMinHeightLocation(BoxHeightArr, minHeight) //確定了高度最低的列后我們就差求出列的位置了,我們通過編寫一個函數實現

        //最后將我們的圖片相對于container盒子進行定位放在每一列下就可以啦
        ccontent[i].style.position = 'absolute'
        ccontent[i].style.top = minHeight +'px'
        ccontent[i].style.left =ccontent[minIndex].offsetLeft + 'px'
        //最后不忘記跟新每一列的高度哦
        BoxHeightArr[minIndex] =BoxHeightArr[minIndex] + ccontent[i].offsetHeight

      }
    }
    // console.log(BoxHeightArr);
  }
  
  
  function getChildElemnt(parent, content) {
    const contentArr = []
    const allContent = parent.getElementsByTagName('*')//通過內置函數getElementsByTagName()將container中的所有元素取出來
    // console.log(allContent);
    for (var i = 0; i < allContent.length; i++) {//但是container中所有的元素中我們只需要的是所有的img,為此我們寫個for循環將所用img篩選出來存放在一個數組中
      if (allContent[i].className == content) {
        contentArr.push(allContent[i])
      }
    }
    // console.log(contentArr);
    return contentArr
  }
  //獲取列最高度最小列的位置下標函數
  function getMinHeightLocation(BoxHeightArr, minHeight) {
    for (var i in BoxHeightArr) {
      if (BoxHeightArr[i] === minHeight) {
        return i
      }
    }
  }

JS算法思路及操作:

  • 將所有的需要排列的圖像獲取出來
  • 因為圖片時放在container盒子里的box盒子里的,因此我們定義了一個函數getChildElemnt()獲取出box的里的圖片,在這個函數中通過內置函數getElementsByTagName()將container中的所有元素取出來,但是container中所有的元素中我們只需要的是所有的img,為此我們寫個for循環將所用img篩選出來存放在一個我們定義的content[]數組中。
  • 提取到所有圖片后我們就要需要確定圖片排列的位置,我們先將在第一行排滿,剩下的圖排列時依次排在在高度最小的列后面,為此我們在排列每張圖片的時候都需要求出高度最小列以及確定其位置

通過 ccontent[0].offsetWidth (每一張圖片的寬度都是一樣的,因此取數組中任意元素均可)獲取css中我們給每張圖片設置的固定寬度,其次利用 document.documentElement.clientWidth 獲取當前網頁比例下瀏覽器的寬度,求出一行最多能整存多少張圖片(即多少列),再使用for循環擺放圖片,先將第一行擺滿,創建BoxHeightArr[]數組存放每列的高度,將Math.min() 方法應用于 BoxHeightArr[]數組中,求出高度最低的列,創建 getMinHeightLocatio()函數獲取列高度最小列的位置下標,與container div 絕對定位擺放,完成后更新每列列高,直至圖片擺放完成。

總結

到此這篇關于HTML+CSS+JS實現圖片的瀑布流布局的示例代碼的文章就介紹到這了,更多相關HTML瀑布流內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章,希望大家以后多多支持腳本之家!

標簽:河池 青海 晉中 崇左 營口 北海 眉山 阜陽

巨人網絡通訊聲明:本文標題《HTML+CSS+JS實現圖片的瀑布流布局的示例代碼》,本文關鍵詞  HTML+CSS+JS,實現,圖片,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML+CSS+JS實現圖片的瀑布流布局的示例代碼》相關的同類信息!
  • 本頁收集關于HTML+CSS+JS實現圖片的瀑布流布局的示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产剧情一区在线| 久久综合九色欧美综合狠狠| 91日韩在线专区| 成人av第一页| 91亚洲精品久久久蜜桃| 91日韩精品一区| 91黄色免费看| 欧美亚洲国产一区二区三区| 91国偷自产一区二区三区观看| jizzjizzjizz欧美| 成人av网站大全| 一本大道av一区二区在线播放| 色综合色狠狠天天综合色| 97精品国产露脸对白| 欧美中文字幕亚洲一区二区va在线 | 国产一区二区三区综合| 精品在线你懂的| 国产精品中文有码| 成人av电影在线| 色狠狠色噜噜噜综合网| 欧美日韩一区二区三区高清| 欧美一区二区免费| 久久综合久久综合久久| 国产精品成人一区二区艾草| ●精品国产综合乱码久久久久| 亚洲视频网在线直播| 亚洲成人免费观看| 日韩 欧美一区二区三区| 国产在线视视频有精品| 成人avav影音| 欧美日韩国产片| 精品少妇一区二区三区| 国产精品国产a| 亚洲成av人在线观看| 激情丁香综合五月| 成人av资源在线| 欧美日韩不卡在线| 久久久久久一二三区| **网站欧美大片在线观看| 视频一区在线播放| 国产成人午夜电影网| 久久综合九色综合97婷婷| 国产精品久久久久影院色老大| 日韩久久一区二区| 美女爽到高潮91| 99久久99久久久精品齐齐| 欧美放荡的少妇| 中文字幕精品三区| 日韩精品1区2区3区| 国产.精品.日韩.另类.中文.在线.播放| 色综合色狠狠综合色| 欧美mv日韩mv国产网站app| 亚洲人被黑人高潮完整版| 奇米一区二区三区| 97精品视频在线观看自产线路二| 日韩一级高清毛片| 亚洲欧美日韩电影| 国产麻豆精品久久一二三| 欧美色综合天天久久综合精品| 国产日韩欧美精品一区| 午夜精品在线视频一区| 波多野结衣中文一区| 91精品国产91久久久久久最新毛片| 国产精品少妇自拍| 美女网站视频久久| 91福利社在线观看| 国产精品午夜在线观看| 三级久久三级久久久| 93久久精品日日躁夜夜躁欧美| 欧美大尺度电影在线| 亚洲另类一区二区| 成人高清视频在线| 精品国产sm最大网站| 亚洲国产成人av| 99久久99久久精品免费看蜜桃| 欧美xfplay| 日韩成人免费电影| 欧美伊人久久久久久久久影院 | 国产高清无密码一区二区三区| 欧美午夜精品一区二区蜜桃| 中文字幕欧美一| 国产乱码精品一区二区三区忘忧草| 欧美精品 日韩| 亚洲精品国产a| jizzjizzjizz欧美| 国产日韩欧美一区二区三区乱码| 久久国产精品色| 欧美一区二区三区在线观看 | 处破女av一区二区| 亚洲精品一区二区三区福利 | 538prom精品视频线放| 一个色妞综合视频在线观看| 91美女片黄在线观看| 国产精品传媒入口麻豆| 国产91富婆露脸刺激对白| 久久久久99精品一区| 毛片不卡一区二区| 日韩欧美一级特黄在线播放| 日韩一区精品字幕| 欧美日韩午夜在线| 亚洲成人久久影院| 欧美视频在线播放| 亚洲1区2区3区4区| 91精品国产一区二区三区| 亚洲成人手机在线| 制服丝袜亚洲色图| 午夜欧美在线一二页| 欧美精品亚洲一区二区在线播放| 亚洲成a人v欧美综合天堂 | 欧美激情在线一区二区| 国产成人在线色| 亚洲国产精品高清| eeuss影院一区二区三区| 国产精品福利一区| 99国产精品久久久久久久久久| 亚洲免费观看高清完整版在线观看熊 | 日韩欧美色综合| 韩国欧美国产1区| 久久久91精品国产一区二区精品| 国产剧情一区二区三区| 中文无字幕一区二区三区| 不卡影院免费观看| 亚洲一区二区三区视频在线| 欧美日韩国产一二三| 免费高清在线视频一区·| 欧美精品一区二区三区高清aⅴ| 国产一区二区电影| 最近日韩中文字幕| 欧美日韩中文字幕一区| 久久er99热精品一区二区| 久久久久久久综合日本| eeuss鲁片一区二区三区| 亚洲国产精品一区二区尤物区| 91精品国产综合久久小美女| 国产精品一区在线| 亚洲精品视频在线| 欧美日韩国产另类一区| 久久国产尿小便嘘嘘| 国产目拍亚洲精品99久久精品| 99re视频精品| 日本一区中文字幕| 国产精品天天看| 欧美日本一区二区三区四区| 精品在线你懂的| 亚洲欧美日韩久久| 欧美一区二区精品久久911| 国产精品888| 亚洲一区免费在线观看| 欧美mv日韩mv| 色婷婷综合久久久中文字幕| 精品一区二区在线视频| 亚洲精品成人精品456| 欧美一区二区三区电影| 成人国产精品免费观看视频| 日本午夜一区二区| 亚洲国产高清不卡| 欧美精品99久久久**| 风流少妇一区二区| 午夜精品一区二区三区免费视频| 国产日韩视频一区二区三区| 欧美专区在线观看一区| 国产一区在线看| 性感美女极品91精品| 欧美激情一区二区三区在线| 在线91免费看| 91视频在线看| 国产一区久久久| 丝袜亚洲另类丝袜在线| 国产精品国产三级国产有无不卡 | 亚洲欧洲色图综合| 日韩欧美一级二级三级| 色婷婷久久综合| 大桥未久av一区二区三区中文| 日韩国产在线观看一区| 亚洲欧美国产高清| 欧美国产亚洲另类动漫| 精品欧美一区二区在线观看| 欧美日韩国产高清一区二区三区| 成人av手机在线观看| 国产一区二区三区av电影 | 91久久线看在观草草青青| 国产精品自拍在线| 日本欧美一区二区在线观看| 亚洲自拍偷拍九九九| 成人免费在线观看入口| 欧美国产日韩一二三区| 日韩免费成人网| 制服丝袜成人动漫| 在线观看一区日韩| 91在线国产福利| 成人三级在线视频| 国产九色精品成人porny| 久久99最新地址| 日韩精品福利网| 三级在线观看一区二区| 亚洲国产视频一区二区| 亚洲最色的网站| 亚洲精品免费播放| 亚洲精品伦理在线| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 |