From f5675ca3fc21c8f56eb4b6873b860d99172f715d Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Thu, 19 Sep 2024 20:43:53 +0200 Subject: [PATCH] Larger max distance for `animateScroll` --- .../middle/message/hooks/useFocusMessage.ts | 3 ++- src/config.ts | 10 +++++----- src/global/actions/ui/messages.ts | 4 ++-- src/util/animateScroll.ts | 20 +++++++++---------- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/components/middle/message/hooks/useFocusMessage.ts b/src/components/middle/message/hooks/useFocusMessage.ts index 05edba787..75426320b 100644 --- a/src/components/middle/message/hooks/useFocusMessage.ts +++ b/src/components/middle/message/hooks/useFocusMessage.ts @@ -3,6 +3,7 @@ import { addExtraClass } from '../../../../lib/teact/teact-dom'; import type { FocusDirection, ScrollTargetPosition } from '../../../../types'; +import { SCROLL_MAX_DISTANCE } from '../../../../config'; import { requestForcedReflow, requestMeasure, requestMutation, } from '../../../../lib/fasterdom/fasterdom'; @@ -10,7 +11,7 @@ import animateScroll from '../../../../util/animateScroll'; // This is used when the viewport was replaced. const BOTTOM_FOCUS_OFFSET = 500; -const RELOCATED_FOCUS_OFFSET = 750; +const RELOCATED_FOCUS_OFFSET = SCROLL_MAX_DISTANCE; const FOCUS_MARGIN = 20; export default function useFocusMessage( diff --git a/src/config.ts b/src/config.ts index 44771826a..6f4badfd9 100644 --- a/src/config.ts +++ b/src/config.ts @@ -168,13 +168,13 @@ export const TMP_CHAT_ID = '0'; export const ANIMATION_END_DELAY = 100; -export const FAST_SMOOTH_MIN_DURATION = 300; -export const FAST_SMOOTH_MAX_DURATION = 600; -export const FAST_SMOOTH_MAX_DISTANCE = 750; -export const FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE = 300; // px +export const SCROLL_MIN_DURATION = 300; +export const SCROLL_MAX_DURATION = 600; +export const SCROLL_MAX_DISTANCE = 800; +export const SCROLL_SHORT_TRANSITION_MAX_DISTANCE = 300; // px // Average duration of message sending animation -export const API_UPDATE_THROTTLE = Math.round((FAST_SMOOTH_MIN_DURATION + FAST_SMOOTH_MAX_DURATION) / 2); +export const API_UPDATE_THROTTLE = Math.round((SCROLL_MIN_DURATION + SCROLL_MAX_DURATION) / 2); export const API_THROTTLE_RESET_UPDATES = new Set([ 'newMessage', 'newScheduledMessage', 'deleteMessages', 'deleteScheduledMessages', 'deleteHistory', ]); diff --git a/src/global/actions/ui/messages.ts b/src/global/actions/ui/messages.ts index b2d644320..faf564d54 100644 --- a/src/global/actions/ui/messages.ts +++ b/src/global/actions/ui/messages.ts @@ -9,8 +9,8 @@ import { FocusDirection } from '../../../types'; import { ANIMATION_END_DELAY, - FAST_SMOOTH_MAX_DURATION, RELEASE_DATETIME, + SCROLL_MAX_DURATION, SERVICE_NOTIFICATIONS_USER_ID, } from '../../../config'; import { copyHtmlToClipboard } from '../../../util/clipboard'; @@ -73,7 +73,7 @@ import { import { getIsMobile } from '../../../hooks/useAppLayout'; const FOCUS_DURATION = 1500; -const FOCUS_NO_HIGHLIGHT_DURATION = FAST_SMOOTH_MAX_DURATION + ANIMATION_END_DELAY; +const FOCUS_NO_HIGHLIGHT_DURATION = SCROLL_MAX_DURATION + ANIMATION_END_DELAY; const POLL_RESULT_OPEN_DELAY_MS = 450; const VERSION_NOTIFICATION_DURATION = 1000 * 60 * 60 * 24 * 3; // 3 days const SERVICE_NOTIFICATIONS_MAX_AMOUNT = 1e3; diff --git a/src/util/animateScroll.ts b/src/util/animateScroll.ts index 213ba4588..41fd4f4a2 100644 --- a/src/util/animateScroll.ts +++ b/src/util/animateScroll.ts @@ -5,10 +5,10 @@ import type { ScrollTargetPosition } from '../types'; import { FocusDirection } from '../types'; import { - FAST_SMOOTH_MAX_DISTANCE, - FAST_SMOOTH_MAX_DURATION, - FAST_SMOOTH_MIN_DURATION, - FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE, + SCROLL_MAX_DISTANCE, + SCROLL_MAX_DURATION, + SCROLL_MIN_DURATION, + SCROLL_SHORT_TRANSITION_MAX_DISTANCE, } from '../config'; import { requestMeasure, requestMutation } from '../lib/fasterdom/fasterdom'; import { selectCanAnimateInterface } from '../global/selectors'; @@ -52,7 +52,7 @@ function createMutateFunction( element: HTMLElement, position: ScrollTargetPosition, margin = 0, - maxDistance = FAST_SMOOTH_MAX_DISTANCE, + maxDistance = SCROLL_MAX_DISTANCE, forceDirection?: FocusDirection, forceDuration?: number, forceNormalContainerHeight?: boolean, @@ -117,10 +117,10 @@ function createMutateFunction( return; } - const transition = absPath <= FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE ? shortTransition : longTransition; + const transition = absPath <= SCROLL_SHORT_TRANSITION_MAX_DISTANCE ? shortTransition : longTransition; const duration = forceDuration || ( - FAST_SMOOTH_MIN_DURATION - + (absPath / FAST_SMOOTH_MAX_DISTANCE) * (FAST_SMOOTH_MAX_DURATION - FAST_SMOOTH_MIN_DURATION) + SCROLL_MIN_DURATION + + (absPath / SCROLL_MAX_DISTANCE) * (SCROLL_MAX_DURATION - SCROLL_MIN_DURATION) ); const startAt = Date.now(); @@ -158,7 +158,7 @@ export function isAnimatingScroll() { function calculateScrollFrom( container: HTMLElement, scrollTo: number, - maxDistance = FAST_SMOOTH_MAX_DISTANCE, + maxDistance = SCROLL_MAX_DISTANCE, forceDirection?: FocusDirection, ) { const { scrollTop } = container; @@ -185,5 +185,5 @@ function shortTransition(t: number) { } function longTransition(t: number) { - return 1 - ((1 - t) ** 6.5); + return 1 - ((1 - t) ** 6); }