jQuery addClass()后跟访问宽度返回错误的值

时间:2015-07-27 23:03:08

标签: jquery css

我在添加"有效"后访问宽度时获得不一致的返回值选择课(4项)。我有一个水平滑块,需要知道其元素的宽度,因为"活跃"一个采用粗体字体,因此稍微改变了元素的大小。

问题是,如果我添加"有效"类并立即请求宽度,它返回旧值。我通过更改类,记录所有宽度,然后放置50ms的超时并在之后立即再次记录所有宽度来确认这一点。这些值会发生变化,如下所示(注意,它在角度应用程序中,因此使用$ timeout):

@Override
protected void onCreate(Bundle bundle) {
    connection = Connection.getInstance(this);
    connection.addObserver(this);
}

@Override
protected void onStart() {
    connection.connect();
}

@Override
protected void onDestroy() {
    connection.deleteObserver(this);
    connection.disconnect();
}

@Override
protected void onActivityResult(int request, int result, Intent data) {
    if (Connection.REQUEST_CODE == request) {
        connection.onActivityResult(result);
    }
}

@Override
public void update(Observable observable, Object data) {
    if (observable != connection) {
        return;
    }
    // Your presentation logic goes here...
}

您希望看到两次记录相同的宽度。但是你没有,你得到这个:

pageNavButtons.addClass("active");
pageNavButtons.each(function () {
    console.log(Math.ceil($(this).get(0).getBoundingClientRect().width));
});

$timeout(function(){
    pageNavButtons.each(function ({
        console.log(Math.ceil($(this).get(0).getBoundingClientRect().width));
    });
},50);

这一直在重现。我有一种感觉渲染器仍在工作,但我怎么能强迫它等待? window.requestAnimationFrame不起作用,我不想使用计时器,这是一个草率的黑客攻击。

注意我使用getBoundingClientRect是因为jQuery中的bug会向下舍入为outerWidth(),我需要子像素精度。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不知道你的意思:

$timeout(function(){....

也许你想用这个:

setTimeout(function(){
    pageNavButtons.each(function ({
     console.log(Math.ceil($(this).get(0).getBoundingClientRect().width));
});

},2000);

这将暂停执行内部脚本;