Scroll: Fix scroll to unread divider (#5388)
This commit is contained in:
parent
8d995f7db7
commit
31db2eed8f
@ -56,6 +56,7 @@ import { orderBy } from '../../util/iteratees';
|
||||
import { isLocalMessageId } from '../../util/keys/messageKey';
|
||||
import resetScroll from '../../util/resetScroll';
|
||||
import { debounce, onTickEnd } from '../../util/schedulers';
|
||||
import { getOffsetToContainer } from '../../util/scroll';
|
||||
import { groupMessages } from './helpers/groupMessages';
|
||||
import { preventMessageInputBlur } from './helpers/preventMessageInputBlur';
|
||||
|
||||
@ -585,7 +586,7 @@ const MessageList: FC<OwnProps & StateProps> = ({
|
||||
newScrollTop = scrollTop + (newAnchorTop - (anchorTopRef.current || 0));
|
||||
} else if (unreadDivider) {
|
||||
newScrollTop = Math.min(
|
||||
unreadDivider.offsetTop - UNREAD_DIVIDER_TOP,
|
||||
getOffsetToContainer(unreadDivider, container).top - UNREAD_DIVIDER_TOP,
|
||||
scrollHeight - scrollOffset,
|
||||
);
|
||||
} else {
|
||||
|
||||
@ -13,6 +13,7 @@ import {
|
||||
import { requestMeasure, requestMutation } from '../lib/fasterdom/fasterdom';
|
||||
import { selectCanAnimateInterface } from '../global/selectors';
|
||||
import { animateSingle, cancelSingleAnimation } from './animation';
|
||||
import { getOffsetToContainer } from './scroll';
|
||||
import { IS_ANDROID } from './windowEnvironment';
|
||||
|
||||
export type AnimateScrollArgs = {
|
||||
@ -55,22 +56,6 @@ export function restartCurrentScrollAnimation() {
|
||||
});
|
||||
}
|
||||
|
||||
function getOffsetToContainer(element: HTMLElement, container: HTMLElement) {
|
||||
let offsetTop = 0;
|
||||
let offsetLeft = 0;
|
||||
|
||||
let current: HTMLElement | null = element;
|
||||
|
||||
while (current && current !== container && !current.contains(container)) {
|
||||
offsetTop += current.offsetTop;
|
||||
offsetLeft += current.offsetLeft;
|
||||
|
||||
current = current.offsetParent as HTMLElement;
|
||||
}
|
||||
|
||||
return { top: offsetTop, left: offsetLeft };
|
||||
}
|
||||
|
||||
function createMutateFunction(args: AnimateScrollArgs) {
|
||||
const {
|
||||
container,
|
||||
|
||||
15
src/util/scroll.ts
Normal file
15
src/util/scroll.ts
Normal file
@ -0,0 +1,15 @@
|
||||
export function getOffsetToContainer(element: HTMLElement, container: HTMLElement) {
|
||||
let offsetTop = 0;
|
||||
let offsetLeft = 0;
|
||||
|
||||
let current: HTMLElement | null = element;
|
||||
|
||||
while (current && current !== container && !current.contains(container)) {
|
||||
offsetTop += current.offsetTop;
|
||||
offsetLeft += current.offsetLeft;
|
||||
|
||||
current = current.offsetParent as HTMLElement;
|
||||
}
|
||||
|
||||
return { top: offsetTop, left: offsetLeft };
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user