最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Element Table 自適應(yīng)高度的實(shí)現(xiàn)示例

 更新時間:2024年07月24日 10:05:12   作者:ErvinHowell  
el-table的高度不能適應(yīng)不同電腦的分辨率,也不能跟隨瀏覽器的高度變化而變化的問題,本文就來解決一下Element Table 自適應(yīng)高度,感興趣的可以了解一下

分析

如下圖(此方案中使用的是Element Table官網(wǎng)copy的代碼(多用于OA, CMS, ERP這類系統(tǒng)中)

如上圖大體目前沒有問題,但是存在細(xì)節(jié)問題那就是在table在滾動的過程中表頭沒有了

如果說這里的列比較多,用戶需要查看的數(shù)據(jù)在最后面,每次某個列的數(shù)據(jù)對應(yīng)的是什么意思(尤其是表格數(shù)字比較多的話,非常惱火),需要上下來回滾動table 內(nèi)容才能解決

所以說我們要解決的就是表頭固定 ①(標(biāo)記問題)

表頭固定簡單 官方提供prop => height,那繼續(xù)看下圖

我們的用戶群在使用產(chǎn)品的過程中, 不可能說是固定用同樣大小屏幕

假設(shè)我們這里設(shè)置了固定高度600px

那有些用戶使用過程中 將窗口縮小了 不夠600px

就會出現(xiàn) table的body中一個滾動條  table外面的容器出現(xiàn)一個滾動條

還有就是有些用戶使用的是大屏幕,很顯然600px可能只占了他屏幕的一半,這里數(shù)據(jù)又多

就又出現(xiàn)新的問題,明明我屏幕可以顯示完,產(chǎn)品這里只占了一半 然后開始滾動

所以新的問題高度如何設(shè)置,才能使我們適應(yīng)各種用戶

我們這里想到一個辦法,動態(tài)計算并且將table的height設(shè)置為父節(jié)點(diǎn)的height
那父節(jié)點(diǎn)不管是flex: 1,還是height:100%,都能夠適應(yīng)

問題

我們需要解決上面兩個問題

  • 要解決的就是表頭固定
  • 高度如何設(shè)置,才能使我們適應(yīng)各種用戶

表頭固定

這里表頭固定還是使用Element UI官方提供的方案——設(shè)置height

<!-- table 部分代碼 -->
<el-table id="tableData" :data="tableData" :height="height">
  <el-table-column prop="date" label="日期" width="140"></el-table-column>
  <el-table-column prop="name" label="姓名" width="120"></el-table-column>
  <el-table-column prop="address" label="地址"></el-table-column>
</el-table>
export default {
  data() {
    const item = {
      date: "2016-05-02",
      name: "王小虎",
      address: "上海市普陀區(qū)金沙江路 1518 弄"
    };
    return {
      // 模擬數(shù)據(jù)
      tableData: Array(100).fill(item),
      // 隨便定義一個初始高度防止報錯
      height: "200px"
    };
  }
}

如上設(shè)置height設(shè)置好了table表頭固定

高度如何設(shè)置

上面設(shè)置好了表頭固定, 繼續(xù)我們要動態(tài)設(shè)置height為父節(jié)點(diǎn)的height
并且給el-table設(shè)置 id <el-table id="tableData" :data="tableData" :height="height">

這里需要注意的是 我們在設(shè)置為父節(jié)點(diǎn)的height的過程中假設(shè)父節(jié)點(diǎn)有padding值我們需要減掉

export default {
    methods: {
    // 這個方法用來動態(tài)設(shè)置 height
    getAutoHeight() {
      let el = document.querySelector("#tableData"),
        elParent = el.parentNode,
        pt = this.getStyle(elParent, "paddingTop"),
        pb = this.getStyle(elParent, "paddingBottom");
      // 一定要使用 nextTick 來改變height 不然不會起作用
      this.$nextTick(() => {
        this.height = elParent.clientHeight - (pt + pb) + "px";
      });
    },
    // 獲取樣式 我們需要減掉 padding-top, padding-bottom的值
    getStyle(obj, attr) {
      // 兼容IE瀏覽器
      let result = obj.currentStyle
        ? obj.currentStyle[attr].replace("px", "")
        : document.defaultView
            .getComputedStyle(obj, null)[attr].replace("px", "");
      return Number(result);
    }
  }
}

高度設(shè)置好了,我們需要在掛載結(jié)束后的鉤子函數(shù)中調(diào)用 此方法

export default {
  mounted() {
    this.getAutoHeight();
  }
}

那基本已經(jīng)離結(jié)束不遠(yuǎn)了 , 繼續(xù)看圖

但是這里又產(chǎn)生了新的問題,那就是 如果窗口大小改變, 那原來的height就不適用于現(xiàn)在的height
來來來 繼續(xù)看圖 就會出現(xiàn)兩個滾動條

解決這個問題的辦法 需要做兩個操作

在window.onresize中調(diào)用我們設(shè)置的 獲取高度的方法

export default {
  mounted() {
    this.getAutoHeight();
    const self = this;
    window.onresize = function() {
      self.getAutoHeight();
    };
  }
}

并且將父級節(jié)點(diǎn)CSS設(shè)置為overflow: hidden

我這里使用的官網(wǎng)示例代碼 我的如下

.el-main {
  overflow: hidden !important;
}

最終成果

我這里用控制臺的高度 模擬窗口高度變化

完整代碼如下

<template>
  <el-container class="layout" style="border: 1px solid #eee">
    <el-aside width="200px" style="background-color: rgb(238, 241, 246)">ASIDE</el-aside>
    <el-container>
      <el-header style="text-align: right; font-size: 12px">HRADER</el-header>
      <el-main>
        <el-table id="tableData" :data="tableData" :height="height">
          <el-table-column prop="date" label="日期" width="140"></el-table-column>
          <el-table-column prop="name" label="姓名" width="120"></el-table-column>
          <el-table-column prop="address" label="地址"></el-table-column>
        </el-table>
      </el-main>
    </el-container>
  </el-container>
</template>
<script>
export default {
  name: "AutoHeightTable",
  data() {
    const item = {
      date: "2016-05-02",
      name: "王小虎",
      address: "上海市普陀區(qū)金沙江路 1518 弄"
    };
    return {
      tableData: Array(100).fill(item),
      height: "200px"
    };
  },
  mounted() {
    this.getAutoHeight();
    const self = this;
    window.onresize = function() {
      self.getAutoHeight();
    };
  },
  methods: {
    getAutoHeight() {
      let el = document.querySelector("#tableData"),
        elParent = el.parentNode,
        pt = this.getStyle(elParent, "paddingTop"),
        pb = this.getStyle(elParent, "paddingBottom");
      this.$nextTick(() => {
        this.height = elParent.clientHeight - (pt + pb) + "px";
      });
    },
    getStyle(obj, attr) {
      // 兼容IE瀏覽器
      let result = obj.currentStyle
        ? obj.currentStyle[attr].replace("px", "")
        : document.defaultView
            .getComputedStyle(obj, null)[attr].replace("px", "");
      return Number(result);
    }
  }
};
</script>
<style>
.layout {
  height: 100%;
  width: 100%;
  overflow: hidden;
}
.el-header {
  background-color: #b3c0d1;
  color: #333;
  line-height: 60px;
}

.el-aside {
  color: #333;
}
.el-main {
  overflow: hidden !important;
}
</style>

上面代碼只是一種思路
更多的解決方案
還是得從業(yè)務(wù)出發(fā)進(jìn)行封裝

到此這篇關(guān)于Element Table 自適應(yīng)高度的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Element Table 自適應(yīng)高度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • elementUI給el-tabs/el-tab-pane添加圖標(biāo)效果實(shí)例

    elementUI給el-tabs/el-tab-pane添加圖標(biāo)效果實(shí)例

    這篇文章主要給大家介紹了關(guān)于elementUI給el-tabs/el-tab-pane添加圖標(biāo)效果實(shí)例的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用elementUI具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-07-07
  • 基于vue3&element-plus的暗黑模式實(shí)例詳解

    基于vue3&element-plus的暗黑模式實(shí)例詳解

    實(shí)現(xiàn)暗黑主題的方式有很多種,也有很多成型的框架可以直接使用,下面這篇文章主要給大家介紹了關(guān)于基于vue3&element-plus的暗黑模式的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Vue項目中l(wèi)oading卡死的問題及解決方案

    Vue項目中l(wèi)oading卡死的問題及解決方案

    文章剖析Vue項目中l(wèi)oading卡死問題,揭示其本質(zhì)為異步阻塞與響應(yīng)式渲染沖突,提出分五層解決方案:nextTick強(qiáng)制刷新、任務(wù)分片/Worker解耦、組件封裝、組合式API管理狀態(tài)、性能優(yōu)化與架構(gòu)調(diào)整,強(qiáng)調(diào)需從UI、異步、計算等多維度優(yōu)化
    2025-07-07
  • 15個Vue技巧,你都知道嗎

    15個Vue技巧,你都知道嗎

    在使用 Vue 開發(fā)的這幾年里,掌握一些有用的技巧,使用一些更高級的技術(shù)點(diǎn),總會有用的,本文就介紹了15個Vue技巧,具有一定的參考價值,感興趣的可以了解一下
    2022-02-02
  • 基于vue.js實(shí)現(xiàn)購物車

    基于vue.js實(shí)現(xiàn)購物車

    這篇文章主要為大家詳細(xì)介紹了基于vue.js實(shí)現(xiàn)購物車,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • vue3自定義插件的作用場景及使用示例詳解

    vue3自定義插件的作用場景及使用示例詳解

    這篇文章主要為大家介紹了vue3自定義插件的作用場景及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Proxy中代理數(shù)據(jù)攔截的方法詳解

    Proxy中代理數(shù)據(jù)攔截的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Proxy中代理數(shù)據(jù)攔截的方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作具有一定的借鑒價值,需要的可以參考一下
    2022-12-12
  • 使用Vue3和Plotly.js繪制交互式漏斗圖的示例代碼

    使用Vue3和Plotly.js繪制交互式漏斗圖的示例代碼

    漏斗圖常用于可視化業(yè)務(wù)流程中的各個階段的轉(zhuǎn)換率,例如銷售漏斗或營銷漏斗,它可以幫助用戶識別流程中的瓶頸和改進(jìn)機(jī)會,本文給大家介紹了如何使用Vue3和Plotly.js繪制交互式漏斗圖,,文中有相關(guān)代碼示例供大家參考,需要的朋友可以參考下
    2024-07-07
  • Vue3項目中多頁面路由配置與Pinia狀態(tài)管理的完全指南

    Vue3項目中多頁面路由配置與Pinia狀態(tài)管理的完全指南

    本文詳細(xì)介紹了Vue3多頁面應(yīng)用開發(fā)中VueRouter4的配置和使用方法,包括首頁、列表頁、詳情頁的頁面導(dǎo)航與參數(shù)傳遞,并展示了Pinia狀態(tài)管理與用戶登錄狀態(tài)、用戶信息管理的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2026-04-04
  • 最適應(yīng)的vue.js的form提交涉及多種插件【推薦】

    最適應(yīng)的vue.js的form提交涉及多種插件【推薦】

    這篇文章主要介紹了最適應(yīng)的vue.js的form提交涉及多種插件,涉及到 vue.js動態(tài)添加css樣式 ,tab切換 ,touch,表單提交,驗證,toast,數(shù)據(jù)雙向綁定等。需要的朋友可以參考下
    2018-08-08

最新評論

天长市| 临沂市| 化德县| 通辽市| 阿克陶县| 永靖县| 霍山县| 石狮市| 伊宁市| 东城区| 扎赉特旗| 确山县| 福鼎市| 新野县| 新沂市| 赤城县| 神木县| 桓仁| 若羌县| 平安县| 庆阳市| 长春市| 宜良县| 富平县| 丁青县| 惠来县| 天台县| 乌苏市| 平阳县| 叶城县| 宜都市| 唐海县| 钦州市| 霍林郭勒市| 汕尾市| 昌吉市| 渑池县| 兴海县| 平潭县| 个旧市| 柘荣县|