我在添加"有效"后访问宽度时获得不一致的返回值选择课(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(),我需要子像素精度。
有什么想法吗?
答案 0 :(得分:0)
我不知道你的意思:
$timeout(function(){....
也许你想用这个:
setTimeout(function(){
pageNavButtons.each(function ({
console.log(Math.ceil($(this).get(0).getBoundingClientRect().width));
});
},2000);
这将暂停执行内部脚本;