From 9bdea0de80a21b214eb9041057ab8e3fea681a8b Mon Sep 17 00:00:00 2001 From: Pepijn Date: Tue, 7 Feb 2017 16:18:20 +0100 Subject: Defering calculations for determining if user scrolled to bottom or not. slight delay improves the accuracy in responsive view (#5244) --- webapp/components/post_view/components/post_list.jsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'webapp/components/post_view') diff --git a/webapp/components/post_view/components/post_list.jsx b/webapp/components/post_view/components/post_list.jsx index 7550db348..3584e9923 100644 --- a/webapp/components/post_view/components/post_list.jsx +++ b/webapp/components/post_view/components/post_list.jsx @@ -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); } -- cgit v1.2.3-1-g7c22