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

vue3獲取、設(shè)置元素高度的代碼舉例

 更新時間:2024年08月20日 09:42:42   作者:一條傻喵  
這篇文章主要給大家介紹了關(guān)于vue3獲取、設(shè)置元素高度的相關(guān)資料,小編通過實際案例向大家展示操作過程,操作方法簡單易懂,需要的朋友可以參考下

前言

在web端常見的需求場景中,會經(jīng)常遇到table表格需要根據(jù)頁面可視區(qū)域使高度自適應(yīng)的情況。 傻喵(作者本人)昨天在嘗試使用vue3實現(xiàn)這個需求時,看了幾篇網(wǎng)上寫的回答,都不太全面,所以干脆自己寫個總結(jié)吧.(第一次寫,輕噴QAQ)

正文

先一起來看看頁面結(jié)構(gòu)

在vue2中,實現(xiàn)這個效果大多是在mounted生命周期中操作DOM元素,進(jìn)行元素屬性的獲取和修改。 升級到vue3后,生命周期前都加了on,所以在onMounted這個生命周期中操作DOM。

代碼示例

1、首先獲取頁面可視區(qū)域、header組件,至于為什么在header組件外又套了一層div,是想實驗另外一個東西,先賣個關(guān)子。

setup(props) {
    console.log(props);
    const hd = ref(null);
    let allHeight = ref("");
    const test = ref(null);
    onMounted(() => {
      //可視區(qū)域高度
      allHeight.value = `${document.documentElement.clientHeight}`;
      //header組件高度
      let hdHeight = hd.value.$el.clientHeight;
    });
    return {
      hd,
      test,
      clienHeight,
    };
  },

const hd = ref(null)定義的名字必須與HTML中<Header ref="hd" />這里的值相同(不相同會報錯)

2、接下來就是給test組件高度賦值了,傻喵本來是想直接將值賦值的 test.value.clientHeight = headerHeight;但是沒有實現(xiàn)效果,具體原因不得而知(有知道原因的可以在評論區(qū)告訴傻喵).

所以只能用另一種方法,style動態(tài)綁定
<Test ref="test" :style="testStyle" />let testStyle = reactive({ height: "0px", });testStyle.height = testHeight + "px";這樣終于實現(xiàn)了DOM元素的賦值

3、關(guān)于在header組件外多加的一層div,是因為傻喵在獲取頁面元素時,發(fā)現(xiàn)ref獲取的組件和div、span等基礎(chǔ)標(biāo)簽打印出的結(jié)構(gòu)不同。

如上圖,依次打印的分別為<div ref="top"></div>以及它內(nèi)部的header組件,基礎(chǔ)標(biāo)簽會直接.value打印出來,而header組件會打印出一個Proxy對象(傻喵猜測應(yīng)該是跟vue3的響應(yīng)式有關(guān),有待考究)。

這同時導(dǎo)致了獲取兩者元素屬性方式的不同

div屬性直接可以const top = ref(null);定義,并通過top.value.clientHeight來獲取它的高度。

而header組件必須hd.value.$el.clientHeight才可以.

下面貼上完整代碼

<template>
  <div ref="top">
    <Header ref="hd" />
  </div>
  <Test ref="test" :style="testStyle" />
</template>

<script>
import Header from "./components/Header.vue";
import Test from "./components/Test.vue";
import { onMounted, reactive, ref } from "vue";
export default {
  name: "App",
  components: {
    Header,
    Test,
  },
  setup(props) {
    console.log(props);
    const hd = ref(null);
    const top = ref(null);
    const test = ref(null);
    let allHeight = ref("");
    let testStyle = reactive({
      height: "0px",
    });
    onMounted(() => {
      allHeight.value = `${document.documentElement.clientHeight}`;
      let hdHeight = hd.value.$el.clientHeight;
      let testHeight = allHeight.value - hdHeight;
      testStyle.height = testHeight + "px";
      console.log(top)
      console.log(hd)
      console.log(top.value.clientHeight)
      console.log(hd.value.$el.clientHeight)
    });
    return {
      hd,
      top,
      test,
      testStyle,
      allHeight,
    };
  },
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin: 0px;
  padding: 0px;
  /* margin-top: 60px; */
}
</style>

結(jié)語

以上就是使用vue3來操作元素高度的總結(jié),還有很多坑點需要去研究

到此這篇關(guān)于vue3獲取、設(shè)置元素高度的文章就介紹到這了,更多相關(guān)vue3獲取設(shè)置元素高度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue2使用element-ui,el-table不顯示,用npm安裝方式

    vue2使用element-ui,el-table不顯示,用npm安裝方式

    這篇文章主要介紹了vue2使用element-ui,el-table不顯示,用npm安裝方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue路由傳參及獲取參數(shù)的方式總結(jié)

    vue路由傳參及獲取參數(shù)的方式總結(jié)

    這篇文章主要介紹了vue路由傳參及獲取參數(shù)的方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue使用axios接收流文件的實現(xiàn)

    vue使用axios接收流文件的實現(xiàn)

    本文主要介紹了vue使用axios接收流文件的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Vue 2源碼解讀$mount函數(shù)原理

    Vue 2源碼解讀$mount函數(shù)原理

    這篇文章主要為大家介紹了Vue 2源碼解讀$mount原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • vue環(huán)境變量配置之process.env解讀

    vue環(huán)境變量配置之process.env解讀

    這篇文章主要介紹了vue環(huán)境變量配置之process.env解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue中多路由表頭吸頂實現(xiàn)的幾種布局方式

    vue中多路由表頭吸頂實現(xiàn)的幾種布局方式

    這篇文章主要介紹了vue項目多路由表頭吸頂實現(xiàn)的幾種布局方式,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • vue?eslint報錯error?"Component?name?"*****"?should?always?be?multi-word"解決

    vue?eslint報錯error?"Component?name?"*****"

    這篇文章主要給大家介紹了關(guān)于vue?eslint報錯error?“Component?name?“*****“?should?always?be?multi-word”的解決方法,文中通過圖文以及實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • vue中對監(jiān)聽esc事件和退出全屏問題的解決方案

    vue中對監(jiān)聽esc事件和退出全屏問題的解決方案

    這篇文章主要介紹了vue中對監(jiān)聽esc事件和退出全屏問題的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 使用Vue編寫一個日期選擇器

    使用Vue編寫一個日期選擇器

    這篇文章主要為大家詳細(xì)介紹了如何使用Vue編寫一個簡單的日期選擇器,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • web面試MVC與MVVM區(qū)別及Vue為什么不完全遵守MVVM解答

    web面試MVC與MVVM區(qū)別及Vue為什么不完全遵守MVVM解答

    這篇文章主要介紹了web面試中常問問題,MVC與MVVM區(qū)別以及Vue為什么不完全遵守MVVM的難點解答,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09

最新評論

台中县| 远安县| 栾城县| 长兴县| 晋江市| 兖州市| 大厂| 永泰县| 灵石县| 乡城县| 乌拉特后旗| 郓城县| 施甸县| 台湾省| 河东区| 二连浩特市| 临江市| 东乌珠穆沁旗| 黑河市| 宝应县| 邵武市| 聂荣县| 兴安盟| 吉首市| 新余市| 九台市| 南通市| 青龙| 内江市| 廊坊市| 黄骅市| 承德县| 出国| 阳泉市| 清河县| 平定县| 丹寨县| 余江县| 林西县| 神农架林区| 邵阳市|