首页 > 解决方案 > 在vue中,更新和nextTick中获取元素的大小比预期的要小?

问题描述

我正在尝试获取元素的高度。如果我尝试过早获取它,高度为 0px。我尝试了许多不同的方法来获取高度:在mounted()、created()、nextTick()、updated() 和window.eventListener 中,但我要么得到0px,要么得到比我想要的小得多的大小期望它是(~117px)。当我在页面上的控制台中运行相同的命令时,我得到了我期望它的大小(~278px)。如果我调整窗口大小,一切正常。我怎样才能让它从一开始就得到正确的高度?

在一个 vue 文件中,我有:

    mounted() {
        this.$nextTick(() => {
            this.vtextHeight = (document.getElementById(this.item.id).offsetHeight - document.getElementsByClassName("v-card__title")[0].offsetHeight) + 'px';
            console.log("next tick", this.vtextHeight);
        });
    },

    updated() {
        this.vtextHeight = (document.getElementById(this.item.id).offsetHeight - document.getElementsByClassName("v-card__title")[0].offsetHeight) + 'px';
        console.log("updated", this.vtextHeight);
    },

    created () {
        var page = this;
        var itemId = this.item.id;

        window.addEventListener('load', () => {
            page.vtextHeight = (document.getElementById(itemId).offsetHeight - document.getElementsByClassName("v-card__title")[0].offsetHeight) + 'px';
            console.log("on load");
        });
        window.addEventListener('resize', () => {
            page.vtextHeight = (document.getElementById(itemId).offsetHeight - document.getElementsByClassName("v-card__title")[0].offsetHeight) + 'px';
            console.log("resize", page.vtextHeight);
        });
    }

在页面加载:

在 1px 窗口调整大小:

标签: javascripthtmlvue.js

解决方案


您可以使用 vue 特定ref的方法来访问 DOM 元素。

例如 :

 <div class="v-card__title" ref="vCard" :style="{'width': '100px', 'height': '200px'}"> 

像这样访问元素高度,

this.$refs.vCard.offsetHeight + 'px';

你可以在这里学习 ref 属性

查看类似的堆栈溢出问题Get element height with Vuejs here


推荐阅读