Defering calculations for determining if user scrolled to bottom or not. slight delay improves the accuracy in responsive view (#5244)

This commit is contained in:
Pepijn
2017-02-07 16:18:20 +01:00
committed by enahum
parent 466bd8415d
commit 9bdea0de80

View File

@@ -120,17 +120,10 @@ export default class PostList extends React.Component {
break;
}
}
this.wasAtBottom = this.isAtBottom();
if (!this.jumpToPostNode && childNodes.length > 0) {
this.jumpToPostNode = childNodes[childNodes.length - 1];
}
// --- --------
this.props.postListScrolled(this.isAtBottom());
this.prevScrollHeight = this.refs.postlist.scrollHeight;
this.prevOffsetTop = this.jumpToPostNode.offsetTop;
this.updateFloatingTimestamp();
if (!this.state.isScrolling) {
@@ -139,6 +132,15 @@ export default class PostList extends React.Component {
});
}
// Postpone all DOM related calculations to next frame.
// scrollHeight etc might return wrong data at this point
setTimeout(() => {
this.wasAtBottom = this.isAtBottom();
this.props.postListScrolled(this.isAtBottom());
this.prevScrollHeight = this.refs.postlist.scrollHeight;
this.prevOffsetTop = this.jumpToPostNode.offsetTop;
}, 0);
this.scrollStopAction.fireAfter(Constants.SCROLL_DELAY);
}