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

时间:2013-08-07 21:55:32

标签: javascript html

一些背景:我正在使用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。前两个更改基于其中文本的大小,第二个更改基于其中的图像大小(ids设计和设计2)

当唯一改变的是文本div时,此功能非常有效。当我更改图像div时,我遇到了问题。看起来涉及getComputedStyle的函数的第一部分在第二次调用函数之前不会获得图像的新高度值。在它被称为第二次之后,一切都像它应该的中心。但理想情况下,一切都应该适用于第一次通话。我在这里做错了什么,如何让div在第一次通话中居中?

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

1 个答案:

答案 0 :(得分:2)

这很可能是因为您在调用中心功能时未完全加载图像。

为图像添加一个事件监听器,以便在加载图像时触发中心功能。

至于分号。永远把它们放进去。查找分号插入。