成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Vue木桶布局插件

hersion / 1963人閱讀

摘要:多行布局下就會導(dǎo)致每行的品牌布局參差不齊,嚴(yán)重影響美觀。于是就有了本篇的木桶布局插件。木桶布局的實現(xiàn)是這樣分步驟的首先對要填放的內(nèi)容進(jìn)行排序,篩選出每一行的元素。

????公司最近在重構(gòu),使用的是Vue框架。涉及到一個品牌的布局,因為品牌的字符長度不一致,所以導(dǎo)致每一個的品牌標(biāo)簽長短不一。多行布局下就會導(dǎo)致每行的品牌布局參差不齊,嚴(yán)重影響美觀。于是就有了本篇的木桶布局插件。

木桶布局的實現(xiàn)是這樣分步驟的:

首先對要填放的內(nèi)容進(jìn)行排序,篩選出每一行的元素。

再對每一行元素進(jìn)行修整,使其美觀對齊。

分步驟
一、根據(jù)需要選出每行的元素

????首先獲取我們需要的元素、和我們目標(biāo)容器的寬度。

Vue組件容器:



二、再者我們需要獲取容器和容器寬度
this.barrelBox = this.$refs.barrel;

this.barrelWidth = this.barrelBox.offsetWidth;
    
三、接著循環(huán)我們的元素,根據(jù)不同的元素的寬度進(jìn)行分組。
ps:對于元素的寬度獲取的時候我們需要對盒模型進(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);

            }

        })
四、接著是對每一組的元素進(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";

    }

})

}

????我這邊是采用的平均分配的方式將多余的寬度平均分配到每一個元素里。如一行中全部元素占800px,有8個元素,該行總長為960px。則每行增加的寬度為(960-800)/8=16,每個與元素寬度增加16px;
????值得注意的是,js在獲取元素寬度的時候會存在精度問題,所以需要進(jìn)行預(yù)設(shè)一個像素進(jìn)行緩沖。

以下是我的代碼地址

Github:vue-barrel

npm: vue-barrel

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/98779.html

相關(guān)文章

  • 大搜車面試總結(jié)

    摘要:面試總結(jié)工作久了有時候也需要出去看看。前幾天大搜車的約了面試,就記錄一下關(guān)于這次面試的具體內(nèi)容。給出大致思路,參數(shù)回調(diào)函數(shù)事件。采用去觸發(fā)事件,在組件注冊相應(yīng)的事件來達(dá)到交互的目的。 面試總結(jié) 工作久了有時候也需要出去看看。 前幾天大搜車的hr約了面試,就記錄一下關(guān)于這次面試的具體內(nèi)容。 一、筆試 先填寫了個人信息,第一步就是筆試。 哪種盒模型包含padding header中哪種標(biāo)...

    ziwenxie 評論0 收藏0
  • 2017-08-15 前端日報

    摘要:前端日報精選變量聲明與賦值值傳遞淺拷貝與深拷貝詳解淺談自適應(yīng)學(xué)習(xí)比你想象的要簡單常見排序算法之實現(xiàn)世界萬物誕生記中文深入理解筆記與異步編程譯不可變和中的知乎專欄譯怎樣避免開發(fā)時的深坑瘋狂的技術(shù)宅在翻譯網(wǎng)格布局掘金詳解改變模糊度亮 2017-08-15 前端日報 精選 ES6 變量聲明與賦值:值傳遞、淺拷貝與深拷貝詳解淺談web自適應(yīng)學(xué)習(xí) React.js 比你想象的要簡單常見排序算法之...

    xinhaip 評論0 收藏0
  • 前端面試題總結(jié)——綜合問題(持續(xù)更新中)

    摘要:如何實現(xiàn)瀏覽器內(nèi)多個標(biāo)簽頁之間的通信阿里調(diào)用等本地存儲方式頁面可見性可以有哪些用途通過的值檢測頁面當(dāng)前是否可見,以及打開網(wǎng)頁的時間等在頁面被切換到其他后臺進(jìn)程的時候,自動暫停音樂或視頻的播放網(wǎng)頁驗證碼是干嘛的,是為了解決什么安全問題。 前端面試題總結(jié)——綜合問題(持續(xù)更新中) 1.頁面從輸入URL到頁面加載顯示完成,這個過程中都發(fā)生了什么?(流程說的越詳細(xì)越好) 1.輸入域名地址2.發(fā)...

    Lin_YT 評論0 收藏0
  • 前端面試題總結(jié)——綜合問題(持續(xù)更新中)

    摘要:如何實現(xiàn)瀏覽器內(nèi)多個標(biāo)簽頁之間的通信阿里調(diào)用等本地存儲方式頁面可見性可以有哪些用途通過的值檢測頁面當(dāng)前是否可見,以及打開網(wǎng)頁的時間等在頁面被切換到其他后臺進(jìn)程的時候,自動暫停音樂或視頻的播放網(wǎng)頁驗證碼是干嘛的,是為了解決什么安全問題。 前端面試題總結(jié)——綜合問題(持續(xù)更新中) 1.頁面從輸入URL到頁面加載顯示完成,這個過程中都發(fā)生了什么?(流程說的越詳細(xì)越好) 1.輸入域名地址2.發(fā)...

    elarity 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<