vue前端自適應(yīng)布局,一步到位所有自適應(yīng)

vue前端自適應(yīng)布局庙洼,一步到位所有自適應(yīng)

頁(yè)面展示

Snipaste_2024-08-08_13-52-11.png
Snipaste_2024-08-08_13-52-31.png

實(shí)現(xiàn)內(nèi)容

1顿痪,左右布局

  • 左側(cè)固定寬帶镊辕,右側(cè)自適應(yīng)剩余的寬度。
  • 中間一條分割線蚁袭,可以拖拉征懈,自適應(yīng)調(diào)整左右側(cè)的寬度。
  • 左側(cè)的高度超長(zhǎng)自動(dòng)出現(xiàn)橫向滾動(dòng)條揩悄,左側(cè)寬度超長(zhǎng)卖哎,自動(dòng)出現(xiàn)豎向滾動(dòng)條。

2删性,上中下布局

  • 最上面的 搜索條件 div 固定占用 100 px 高度亏娜,下面的 查詢條件 div 固定占用 30 px 高度,最下面的分頁(yè)固定占用高度蹬挺,頁(yè)面剩下的高度自動(dòng)分配給中間的表格內(nèi)容维贺。
  • 表格內(nèi)容高度超過(guò)后自動(dòng)出現(xiàn)豎向滾動(dòng)條,寬度超出后自動(dòng)出現(xiàn)橫向滾動(dòng)條巴帮。
  • 點(diǎn)擊按鈕溯泣,可以 隱藏/顯示 搜索條件 div 里面的內(nèi)容。
  • 當(dāng)隱藏 搜索條件 div 里面的內(nèi)容時(shí)晰韵,中間表格的高度為:整個(gè)頁(yè)面的高度—操作按鈕div的高度—分頁(yè)div的高度发乔。
  • 當(dāng)搜索條件 div 里面的內(nèi)容時(shí),中間表格的高度為:整個(gè)頁(yè)面的高度—搜索條件div的高度—操作按鈕div的高度—分頁(yè)div的高度雪猪。

3栏尚,分辨率自適應(yīng)

  • 加載即動(dòng)態(tài)實(shí)時(shí)計(jì)算高度,寬度

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

<template>
  <div class="app-container">
    <div class="left" :style="{ width: leftWidth + 'px' }">
      <div class="right-center-left">
        左邊的內(nèi)容只恨,可以很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)<br />
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
      </div>
    </div>
    <div class="divider" @mousedown="startDragging"></div>
    <div class="right">
      <div v-if="showDiv1" class="div1">查詢條件</div>
      <div class="div2">
        <button @click="toggleDiv1">操作按鈕 div1</button>
      </div>
      <div class="div3" :style="{ height: div3Height + 'px' }">
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
        1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />
      </div>
      <div class="div4">分頁(yè)</div>
    </div>
  </div>
</template>

<script>
export default {
  name: "AppContainer",
  data() {
    return {
      isDragging: false,
      leftWidth: 200,
      showDiv1: true
    };
  },
  computed: {
    div3Height() {
      const totalHeight = window.innerHeight;
      const div2Height = 30;
      const div4Height = 30;
      const div1Height = this.showDiv1 ? 100 : 0;

      // 計(jì)算 div3 的高度
      return totalHeight - div2Height - div4Height - div1Height;
    }
  },
  methods: {
    startDragging(e) {
      this.isDragging = true;
      document.addEventListener("mousemove", this.onDrag);
      document.addEventListener("mouseup", this.stopDragging);
    },
    onDrag(e) {
      if (this.isDragging) {
        const minWidth = 50;
        const maxWidth = window.innerWidth - 50;
        const newLeftWidth = e.clientX;

        if (newLeftWidth > minWidth && newLeftWidth < maxWidth) {
          this.leftWidth = newLeftWidth;
        }
      }
    },
    stopDragging() {
      this.isDragging = false;
      document.removeEventListener("mousemove", this.onDrag);
      document.removeEventListener("mouseup", this.stopDragging);
    },
    toggleDiv1() {
      this.showDiv1 = !this.showDiv1;
    }
  }
};
</script>

<style scoped>
.app-container {
  display: flex;
  height: 100vh;
  overflow: hidden;
}

.left {
  overflow-x: auto;
  overflow-y: auto;
  white-space: nowrap;
  min-width: 90px;
}

.divider {
  width: 5px;
  cursor: ew-resize;
  background-color: #ccc;
}

.right {
  display: flex;
  flex-direction: column;
  height: 100%;
  flex: 1; /* 自動(dòng)填滿剩余寬度 */
}

.div1 {
  height: 100px;
  background-color: #f0f0f0;
}

.div2 {
  height: 30px;
  background-color: #ddd;
}

.div3 {
  overflow-x: auto; /* 添加橫向滾動(dòng)條 */
  overflow-y: auto; /* 添加縱向滾動(dòng)條 */
  background-color: #f5f5f5;
}

.div4 {
  height: 200px;
  background-color: #ccc;
}
</style>

實(shí)現(xiàn)感想

這個(gè)功能译仗,從畢業(yè)就開(kāi)始思索,直到八年后的今天成熟完善官觅,真是艱辛也是很不容易纵菌。目前市面上沒(méi)有見(jiàn)過(guò)有人實(shí)現(xiàn),很多人都是只言片語(yǔ)的休涤,基本復(fù)制下來(lái)咱圆,無(wú)法達(dá)到效果。我這個(gè)一鍵復(fù)制到自己的項(xiàng)目功氨,就能實(shí)現(xiàn)了序苏,中間的坎坷不平,到了完全實(shí)現(xiàn)的這一刻捷凄,才覺(jué)得激動(dòng)不已忱详。

無(wú)任何坑,也沒(méi)有任何額外的引入跺涤,一個(gè)普普通通匈睁,最簡(jiǎn)單的vue頁(yè)面监透,布局建好,里面的內(nèi)容就可以自己隨意發(fā)揮了航唆。

未覺(jué)池塘春草夢(mèng)胀蛮,階前梧葉已秋聲。記錄激動(dòng)時(shí)刻佛点,也造福后來(lái)人醇滥。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末黎比,一起剝皮案震驚了整個(gè)濱河市超营,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阅虫,老刑警劉巖演闭,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颓帝,居然都是意外死亡米碰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)购城,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吕座,“玉大人,你說(shuō)我怎么就攤上這事瘪板∥馀浚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵侮攀,是天一觀的道長(zhǎng)锣枝。 經(jīng)常有香客問(wèn)我,道長(zhǎng)兰英,這世上最難降的妖魔是什么撇叁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮畦贸,結(jié)果婚禮上陨闹,老公的妹妹穿的比我還像新娘。我一直安慰自己薄坏,他們只是感情好趋厉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著颤殴,像睡著了一般觅廓。 火紅的嫁衣襯著肌膚如雪质礼。 梳的紋絲不亂的頭發(fā)上膳帕,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天履腋,我揣著相機(jī)與錄音企软,去河邊找鬼。 笑死瞳脓,一個(gè)胖子當(dāng)著我的面吹牛塑娇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播劫侧,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼埋酬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了烧栋?” 一聲冷哼從身側(cè)響起写妥,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎审姓,沒(méi)想到半個(gè)月后珍特,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡魔吐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年扎筒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酬姆。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嗜桌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辞色,到底是詐尸還是另有隱情骨宠,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布淫僻,位于F島的核電站诱篷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏雳灵。R本人自食惡果不足惜棕所,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悯辙。 院中可真熱鬧琳省,春花似錦、人聲如沸躲撰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拢蛋。三九已至桦他,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谆棱,已是汗流浹背快压。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工圆仔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔫劣。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓坪郭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親脉幢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子歪沃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容