函数不'除非调用两次,否则无法正确执行

Function doesn't correctly perform unless it is called twice

本文关键字:两次 执行 调用 函数      更新时间:2023-09-26

一些背景:我正在使用JavaScript将高度随父div条件而变化的子div垂直居中。居中函数如下:

function autoCenter()
{var firstline = document.getElementById("ntext");
var secondline = document.getElementById("dtext");
var l1h = parseInt(getComputedStyle(firstline)["height"]);
var l2h = parseInt(getComputedStyle(secondline)["height"]);
var d1h = parseInt(getComputedStyle(document.getElementById("design"))["height"]);
var d2h = parseInt(getComputedStyle(document.getElementById("design2"))["height"]);
var totalh = l1h + l2h + d1h+ d2h;
document.getElementById("desdiv").style.top = (212-totalh)/2 + "px";
firstline.style.top = (212-totalh)/2  + d1h +"px";
secondline.style.top = (212-totalh)/2 + l1h + d1h + "px";
document.getElementById("desdiv2").style.top = (212-totalh)/2 + l1h + l2h + d1h+ "px";}

ntext、dtext、desdiv和desdiv2是div。第一个2基于它们中文本的大小而改变,第二个2基于其中图像的大小而变化(ids design&design 2)

当只有文本div发生变化时,此函数非常有效。我在更改图像div时遇到了问题。在第二次调用函数之前,函数的第一部分(涉及getComputedStyle)似乎不会获得图像的新高度值。在它被称为第二次之后,一切都像它应该的那样集中。但理想情况下,第一次通话时一切都应该正常。我在这里做错了什么?我如何才能让div集中在第一个呼叫上?

编辑:我不确定这是否相关,但autoCenter()总是从另一个函数中调用。

这很可能是因为在调用center函数时图像没有完全加载。

向图像添加一个事件侦听器,以便在加载图像时激发中心函数。

至于分号。总是把它们放进去。查找分号插入。