小編給大家分享一下Vue木桶布局怎么弄,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),集網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營(yíng)銷、軟文發(fā)布平臺(tái)等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計(jì),讓網(wǎng)站在運(yùn)行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計(jì)制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。
公司最近在重構(gòu),使用的是Vue框架。涉及到一個(gè)品牌的布局,因?yàn)槠放频淖址L(zhǎng)度不一致,所以導(dǎo)致每一個(gè)的品牌標(biāo)簽長(zhǎng)短不一。多行布局下就會(huì)導(dǎo)致每行的品牌布局參差不齊,嚴(yán)重影響美觀。于是就有了本篇的木桶布局插件。
木桶布局的實(shí)現(xiàn)是這樣分步驟的:
1、首先對(duì)要填放的內(nèi)容進(jìn)行排序,篩選出每一行的元素。
2、再對(duì)每一行元素進(jìn)行修整,使其美觀對(duì)齊。
分步驟
一、根據(jù)需要選出每行的元素
首先獲取我們需要的元素、和我們目標(biāo)容器的寬度。
Vue組件容器:
<template>
<div ref="barrel">
<slot></slot>
</div>
</template>二、再者我們需要獲取容器和容器寬度
this.barrelBox = this.$refs.barrel; this.barrelWidth = this.barrelBox.offsetWidth;
三、接著循環(huán)我們的元素,根據(jù)不同的元素的寬度進(jìn)行分組。
ps:對(duì)于元素的寬度獲取的時(shí)候我們需要對(duì)盒模型進(jìn)行區(qū)分。
Array.prototype.forEach.call(items, (item) => {
paddingRight = 0;
paddingLeft = 0;
marginLeft = parseInt(window.getComputedStyle(item, "").getPropertyValue('margin-left'));
marginRight = parseInt(window.getComputedStyle(item, "").getPropertyValue('margin-right'));
let boxSizing = window.getComputedStyle(item, "").getPropertyValue('box-sizing');
if (boxSizing !== 'border-box') {
paddingRight = parseInt(window.getComputedStyle(item, "").getPropertyValue('padding-right'));
paddingLeft = parseInt(window.getComputedStyle(item, "").getPropertyValue('padding-left'));
}
widths = item.offsetWidth + marginLeft + marginRight + 1;
item.realWidth = item.offsetWidth - paddingLeft - paddingRight + 1;
let tempWidth = rowWidth + widths;
if (tempWidth > barrelWidth) {
dealWidth(rowList, rowWidth, barrelWidth);
rowList = [item];
rowWidth = widths;
} else {
rowWidth = tempWidth;
rowList.push(item);
}
})四、接著是對(duì)每一組的元素進(jìn)行合理分配。
const dealWidth = (items, width, maxWidth) => {
let remain = maxWidth - width;
let num = items.length;
let remains = remain % num;
let residue = Math.floor(remain / num);
items.forEach((item, index) => {
if (index === num - 1) {
item.style.width = item.realWidth + residue + remains + 'px';
} else {
item.style.width = item.realWidth + residue + 'px';
}
})
}我這邊是采用的平均分配的方式將多余的寬度平均分配到每一個(gè)元素里。如一行中全部元素占800px,有8個(gè)元素,該行總長(zhǎng)為960px。則每行增加的寬度為(960-800)/8=16,每個(gè)與元素寬度增加16px;
值得注意的是,js在獲取元素寬度的時(shí)候會(huì)存在精度問題,所以需要進(jìn)行預(yù)設(shè)一個(gè)像素進(jìn)行緩沖。
以上是Vue木桶布局怎么弄的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
本文名稱:Vue木桶布局怎么弄
URL分享:http://www.chinadenli.net/article36/pgscpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、App設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)、服務(wù)器托管、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)