javascript计算有时不会发生

在以下代码段中:

var scr_h = $(document).height(); var scr_w = $(document).width(); var logo = { width : (scr_w*.25), img : document.createElement('img'), src : 'images/static/mk_vc.png' }; $(logo.img).attr('src', logo.src); $('#logo').append(logo.img); $('#logo').css({ 'margin-top' : scr_h*.15+'px', 'width' : logo.width+'px', 'left' : (scr_w/2)-(logo.width/2)+'px' //this doesn't always work... }); alert($('#logo').css('left')); 

有时警报会以“自动”而不是正确的号码返回。 如果刷新页面通常会发生这种情况(尽管ctrl + refresh通常会解决问题)。 我尝试通过php渲染页面并将一个?randomnumber=$randomnumber参数附加到JavaScript调用,但它没有帮助,这意味着它不是某种缓存问题。

它似乎也发生在所有浏览器中。 我的客户有一台Mac,并尝试使用Chrome和Safari,我有Linux,并在Chrome和Firefox中尝试过。

有什么想法吗? 其余的JavaScript函数都很好,无论该特定行是否正确呈现。 margin-topwidth css也始终有效。 它似乎只是left提出问题。

我尝试更改顺序以首先渲染“左”,但这也没有帮助,尽管其他两个属性仍然很好。

完整的脚本可以在http://meenakhalili.turnleftllc.com/scripts/js/dev/mk.js上看到,网站位于meenakhalili.turnleftllc.com。 尝试刷新几次。 你会看到问题所在。

我想这取决于代码执行时所呈现的页面,如果代码包含在$(function(){…})或类似内容中,这是不确定的。

您可以尝试测量窗口而不是文档:

 var scr_h = $(window).height(); var scr_w = $(window).width(); 

Chchrist昨晚在评论中回答了这个问题。 将计算设置为在图像的onload事件之后发生问题。

我现在正在发布这个post,但我很乐意在它到期的地方给予信任!