JS實(shí)現(xiàn)瀑布流效果
本文實(shí)例為大家分享了JS實(shí)現(xiàn)瀑布流效果的具體代碼,供大家參考,具體內(nèi)容如下
話不多說,直接上代碼。如下:
CSS部分:
<style>
.cont{margin: 0 auto;position: relative;}
.box{float: left;padding: 4px;}
.imgbox{ padding: 4px;}
.imgbox img{width: 200px;display: block;border-radius: 4px;}
</style>
HTML部分(圖片可自行添加):
<div class="cont"> <div class="box"> <div class="imgbox"> <img src="../img/WaterF2.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../img/WaterF1.jpg" alt=""> </div> </div> // ... </div>
JS部分:
<script>
onload = function(){
var wf = new WaterF();
wf.init();
}
class WaterF{
constructor(){
this.clientW = document.documentElement.clientWidth;
this.abox = document.querySelectorAll(".box");
this.cont = document.querySelector(".cont");
}
init(){
// 根據(jù)屏幕的寬度 / 任意一個(gè)結(jié)構(gòu)的寬度,得到一行最多能放多少個(gè)圖片
this.maxNum = parseInt(this.clientW / this.abox[0].offsetWidth);
// 根據(jù)一行能放置的個(gè)數(shù) * 任意一張圖片的寬度,得到了外框的真正的寬度
this.cont.style.width = this.maxNum * this.abox[0].offsetWidth + "px";
// 完善布局之后,開始區(qū)分第一行和后面的行
this.firstLine();
this.otherLine();
}
firstLine(){
// 第一行,獲取所有元素的高度放在一個(gè)數(shù)組中,準(zhǔn)備獲取最小值
this.heightArr = [];
for(var i=0;i<this.maxNum;i++){
this.heightArr.push(this.abox[i].offsetHeight);
}
}
otherLine(){
// 需要拿到后面行的所有元素
for(var i=this.maxNum;i<this.abox.length;i++){
var min = getMin(this.heightArr);
var minIndex = this.heightArr.indexOf(min);
// 設(shè)置定位
this.abox[i].style.position = "absolute";
// 根據(jù)最小值設(shè)置top
this.abox[i].style.top = min + "px";
// 根據(jù)最小值的索引設(shè)置left
this.abox[i].style.left = minIndex * this.abox[0].offsetWidth + "px";
// 修改最小值為,原來的數(shù)據(jù)+當(dāng)前新放置元素的高度
this.heightArr[minIndex] = this.heightArr[minIndex] + this.abox[i].offsetHeight;
}
}
}
function getMin(arr){
var myarr = [];
for(var j=0;j<arr.length;j++){
myarr.push(arr[j]);
}
return myarr.sort((a,b)=>a-b)[0];
}
</script>
效果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js實(shí)現(xiàn)的美女瀑布流效果代碼
- javascript自適應(yīng)寬度的瀑布流實(shí)現(xiàn)思路
- 原生JS實(shí)現(xiàn)響應(yīng)式瀑布流布局
- js實(shí)現(xiàn)瀑布流的三種方式比較
- 解析瀑布流布局:JS+絕對定位的實(shí)現(xiàn)
- 純js實(shí)現(xiàn)瀑布流展現(xiàn)照片(自動(dòng)適應(yīng)窗口大小)
- js實(shí)現(xiàn)瀑布流的一種簡單方法實(shí)例分享
- vue.js組件vue-waterfall-easy實(shí)現(xiàn)瀑布流效果
- 純js實(shí)現(xiàn)瀑布流布局及ajax動(dòng)態(tài)新增數(shù)據(jù)
- JavaScript實(shí)現(xiàn)瀑布流以及加載效果
相關(guān)文章
微信小程序 自定義彈窗實(shí)現(xiàn)過程(附代碼)
這篇文章主要介紹了微信小程序 自定義彈窗實(shí)現(xiàn)過程(附代碼),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
淺析JavaScriptSerializer類的序列化與反序列化
本篇文章主要介紹了JavaScriptSerializer類 對象序列化與反序列化的方法、屬性以及實(shí)例代碼,有需要的朋友可以參考一下2016-11-11
使用Object.defineProperty如何巧妙找到修改某個(gè)變量的準(zhǔn)確代碼位置
Object.defineProperty() 方法直接在一個(gè)對象上定義一個(gè)新屬性,或者修改一個(gè)已經(jīng)存在的屬性, 并返回這個(gè)對象。下面這篇文章主要給大家介紹了關(guān)于使用Object.defineProperty如何巧妙找到修改某個(gè)變量的準(zhǔn)確代碼位置的相關(guān)資料,需要的朋友可以參考下2018-11-11
extjs簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了extjs簡介,ExtJS為開發(fā)者在開發(fā)富客戶的B/S應(yīng)用中提供豐富的UI組件,具有統(tǒng)一的主題,便于快速開發(fā),提高效率2017-07-07
JavaScript滑動(dòng)驗(yàn)證功能實(shí)現(xiàn)詳細(xì)代碼
這篇文章主要給大家介紹了關(guān)于JavaScript滑動(dòng)驗(yàn)證功能實(shí)現(xiàn)的相關(guān)資料,滑動(dòng)拼圖驗(yàn)證功能是一種常見的網(wǎng)站人機(jī)驗(yàn)證方法,旨在防止惡意機(jī)器人或自動(dòng)化程序?qū)W(wǎng)站進(jìn)行惡意攻擊,需要的朋友可以參考下2024-06-06

