vue3获取、设置元素高度的代码举例

 更新时间:2024年08月20日 09:42:42   作者:一条傻喵  
这篇文章主要给大家介绍了关于vue3获取、设置元素高度的相关资料,小编通过实际案例向大家展示操作过程,操作方法简单易懂,需要的朋友可以参考下

前言

在web端常见的需求场景中,会经常遇到table表格需要根据页面可视区域使高度自适应的情况。 傻喵(作者本人)昨天在尝试使用vue3实现这个需求时,看了几篇网上写的回答,都不太全面,所以干脆自己写个总结吧.(第一次写,轻喷QAQ)

正文

先一起来看看页面结构

在vue2中,实现这个效果大多是在mounted生命周期中操作DOM元素,进行元素属性的获取和修改。 升级到vue3后,生命周期前都加了on,所以在onMounted这个生命周期中操作DOM。

代码示例

1、首先获取页面可视区域、header组件,至于为什么在header组件外又套了一层div,是想实验另外一个东西,先卖个关子。

setup(props) {
    console.log(props);
    const hd = ref(null);
    let allHeight = ref("");
    const test = ref(null);
    onMounted(() => {
      //可视区域高度
      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;但是没有实现效果,具体原因不得而知(有知道原因的可以在评论区告诉傻喵).

所以只能用另一种方法,style动态绑定
<Test ref="test" :style="testStyle" />let testStyle = reactive({ height: "0px", });testStyle.height = testHeight + "px";这样终于实现了DOM元素的赋值

3、关于在header组件外多加的一层div,是因为傻喵在获取页面元素时,发现ref获取的组件和div、span等基础标签打印出的结构不同。

如上图,依次打印的分别为<div ref="top"></div>以及它内部的header组件,基础标签会直接.value打印出来,而header组件会打印出一个Proxy对象(傻喵猜测应该是跟vue3的响应式有关,有待考究)。

这同时导致了获取两者元素属性方式的不同

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>

结语

以上就是使用vue3来操作元素高度的总结,还有很多坑点需要去研究

到此这篇关于vue3获取、设置元素高度的文章就介绍到这了,更多相关vue3获取设置元素高度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue纯前端实现导出excel中的图片与文件超链接

    Vue纯前端实现导出excel中的图片与文件超链接

    这篇文章主要为大家详细介绍了Vue如何纯前端实现导出excel中的图片与文件超链接,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2025-03-03
  • Vue组件间通信 Vuex的用法解析

    Vue组件间通信 Vuex的用法解析

    这篇文章主要介绍了Vue组件间通信-Vuex,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 解决el-tree数据回显时子节点部分选中父节点都全选中的坑

    解决el-tree数据回显时子节点部分选中父节点都全选中的坑

    本文主要介绍了解决el-tree数据回显时子节点部分选中父节点都全选中的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • uniapp中uni-load-more的使用方式

    uniapp中uni-load-more的使用方式

    这篇文章主要介绍了uniapp中uni-load-more的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • vue 3.0 vue.config.js文件常用配置方式

    vue 3.0 vue.config.js文件常用配置方式

    这篇文章主要介绍了vue 3.0 vue.config.js文件常用配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Vue的事件响应式进度条组件实例详解

    Vue的事件响应式进度条组件实例详解

    这篇文章主要介绍了Vue的事件响应式进度条组件的实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 浅析Vue实例以及生命周期

    浅析Vue实例以及生命周期

    这篇文章给大家分享了Vue实例以及生命周期的相关知识点内容,有兴趣的朋友们可以学习下。
    2018-08-08
  • element el-input directive数字进行控制

    element el-input directive数字进行控制

    本文介绍了vue使用directive 进行控制的方法,使用element开发的过程中遇到循环的数据只能输入数字,并且有不要小数点,有需要小数点的,就有一定的参考价值,有兴趣的可以了解一下
    2018-10-10
  • Vue自定义指令详细

    Vue自定义指令详细

    这篇文章主要介绍了Vue自定义指令,文章从背景开始详细介绍Vue自定义指令的详细内容,随着Vue自定义指令的相关资料展开具体内容,需要的朋友可以参考一下
    2021-11-11
  • Vue3视频播放器组件Vue3-video-play新手入门教程

    Vue3视频播放器组件Vue3-video-play新手入门教程

    这篇文章主要给大家介绍了关于Vue3视频播放器组件Vue3-video-play新手入门教程的相关资料,本文实例为大家分享了vue-video-player视频播放器的使用配置,供大家参考,需要的朋友可以参考下
    2023-12-12

最新评论