当前位置: 代码网 > it编程>编程语言>Javascript > vue3获取、设置元素高度的代码举例

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

2024年09月05日 Javascript 我要评论
前言在web端常见的需求场景中,会经常遇到table表格需要根据页面可视区域使高度自适应的情况。 傻喵(作者本人)昨天在尝试使用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获取设置元素高度内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com