您的位置:首页 > 财经 > 产业 > vue3中onMounted获取元素高度不准确

vue3中onMounted获取元素高度不准确

2024/12/21 21:49:38 来源:https://blog.csdn.net/weixin_44259233/article/details/140717892  浏览:    关键词:vue3中onMounted获取元素高度不准确

问题描述

  1. 在vue3的onMounted中获取到的元素高度与实际高度不符

  2. 通过nextTick也获取不到实际高度。

以上数据可以通过打印ref实例和ref.value.offersetHeight查看

<div class="video-player" @click="playPauseVideo" ref="playerDiv"><video style="width: 100%;height:100%;object-fit: fill" ref="player"></video>
</div>
export default {setup(){const playerDiv = ref(null);const playerDivHeight = ref(0);const player = ref(null);const playerHeight = ref(0);onMounted(()=>{nextTick(()=>{playerDivHeight.value = playerDiv.value.offsetHeight;playerHeight.value = player.value.offsetHeight;//查看打印实例中的value里的offsetHeight属性发现值为772console.log("playerDiv",playerDiv)//查看打印的获取值为158console.log("playerDivHeight", playerDivHeight.value)//查看打印实例中的value里的offsetHeight属性发现值为764console.log("player",player)//查看打印的获取值为150console.log("playerHeight", playerHeight.value)})})}
}

 

 

 

原因

页面元素和页面资源未完全渲染与加载完,就获取高度,导致获取不准确。 

解决方案(参考)

设个定时器,在页面挂载完1秒后再获取高度,就获取到实际高度了,但是有一点,页面体验感不是很好,而且偶尔也会出现获取值不准确现象。如果你有更好的解决方案,可以在下方评论区留言。

export default {setup(){const playerDiv = ref(null);const playerDivHeight = ref(0);const player = ref(null);const playerHeight = ref(0);onMounted(()=>{let timer = null;nextTick(()=>{timer = setInterval(function () {if (document.readyState === "complete") {playerDivHeight.value = playerDiv.value.offsetHeight;playerHeight.value = player.value.offsetHeight;console.log("playerDiv",playerDiv)console.log("playerDivHeight", playerDivHeight.value)console.log("player",player)console.log("playerHeight", playerHeight.value)window.clearInterval(timer);}}, 1000);})})}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com