Hide "tap zone overlay" on user action

This commit is contained in:
schroda
2024-12-30 16:50:54 +01:00
parent 6a32395234
commit f3962646e6
3 changed files with 19 additions and 2 deletions

View File

@@ -29,6 +29,7 @@ import { ScrollOffset } from '@/modules/core/Core.types.ts';
import { getOptionForDirection } from '@/modules/theme/services/ThemeCreator.ts'; import { getOptionForDirection } from '@/modules/theme/services/ThemeCreator.ts';
import { FALLBACK_MANGA } from '@/modules/manga/Manga.constants.ts'; import { FALLBACK_MANGA } from '@/modules/manga/Manga.constants.ts';
import { useReaderAutoScrollContext } from '@/modules/reader/contexts/ReaderAutoScrollContext.tsx'; import { useReaderAutoScrollContext } from '@/modules/reader/contexts/ReaderAutoScrollContext.tsx';
import { useReaderTapZoneContext } from '@/modules/reader/contexts/ReaderTapZoneContext.tsx';
const useHotkeys = (...args: Parameters<typeof useHotKeysHook>): ReturnType<typeof useHotKeysHook> => { const useHotkeys = (...args: Parameters<typeof useHotKeysHook>): ReturnType<typeof useHotKeysHook> => {
const [keys, callback, options, dependencies] = args; const [keys, callback, options, dependencies] = args;
@@ -80,6 +81,7 @@ export const ReaderHotkeys = ({
autoScroll, autoScroll,
} = ReaderService.useSettings(); } = ReaderService.useSettings();
const automaticScrolling = useReaderAutoScrollContext(); const automaticScrolling = useReaderAutoScrollContext();
const { setShowPreview } = useReaderTapZoneContext();
const openChapter = ReaderControls.useOpenChapter(); const openChapter = ReaderControls.useOpenChapter();
const openPage = ReaderControls.useOpenPage(); const openPage = ReaderControls.useOpenPage();
@@ -102,6 +104,7 @@ export const ReaderHotkeys = ({
scrollElementRef.current, scrollElementRef.current,
openChapter, openChapter,
setIsOverlayVisible, setIsOverlayVisible,
setShowPreview,
ReaderScrollAmount.SMALL, ReaderScrollAmount.SMALL,
), ),
{ preventDefault: true }, { preventDefault: true },
@@ -120,6 +123,7 @@ export const ReaderHotkeys = ({
scrollElementRef.current, scrollElementRef.current,
openChapter, openChapter,
setIsOverlayVisible, setIsOverlayVisible,
setShowPreview,
ReaderScrollAmount.SMALL, ReaderScrollAmount.SMALL,
), ),
{ preventDefault: true }, { preventDefault: true },

View File

@@ -41,7 +41,7 @@ import {
} from '@/modules/reader/utils/ReaderPager.utils.tsx'; } from '@/modules/reader/utils/ReaderPager.utils.tsx';
import { useReaderOverlayContext } from '@/modules/reader/contexts/ReaderOverlayContext.tsx'; import { useReaderOverlayContext } from '@/modules/reader/contexts/ReaderOverlayContext.tsx';
import { useReaderTapZoneContext } from '@/modules/reader/contexts/ReaderTapZoneContext.tsx'; import { useReaderTapZoneContext } from '@/modules/reader/contexts/ReaderTapZoneContext.tsx';
import { TapZoneRegionType } from '@/modules/reader/types/TapZoneLayout.types.ts'; import { TapZoneRegionType, TReaderTapZoneContext } from '@/modules/reader/types/TapZoneLayout.types.ts';
import { ReaderTapZoneService } from '@/modules/reader/services/ReaderTapZoneService.ts'; import { ReaderTapZoneService } from '@/modules/reader/services/ReaderTapZoneService.ts';
import { isContinuousReadingMode } from '@/modules/reader/utils/ReaderSettings.utils.tsx'; import { isContinuousReadingMode } from '@/modules/reader/utils/ReaderSettings.utils.tsx';
import { getReaderChapterFromCache } from '@/modules/reader/utils/Reader.utils.ts'; import { getReaderChapterFromCache } from '@/modules/reader/utils/Reader.utils.ts';
@@ -97,6 +97,7 @@ export class ReaderControls {
element: HTMLElement, element: HTMLElement,
openChapter: ReturnType<(typeof ReaderControls)['useOpenChapter']>, openChapter: ReturnType<(typeof ReaderControls)['useOpenChapter']>,
setIsOverlayVisible: TReaderOverlayContext['setIsVisible'], setIsOverlayVisible: TReaderOverlayContext['setIsVisible'],
setShowPreview: TReaderTapZoneContext['setShowPreview'],
scrollAmountPercentage: number = ReaderScrollAmount.LARGE, scrollAmountPercentage: number = ReaderScrollAmount.LARGE,
): void { ): void {
if (!element) { if (!element) {
@@ -125,6 +126,7 @@ export class ReaderControls {
currentPos + elementSize * scrollAmount * scrollDirection; currentPos + elementSize * scrollAmount * scrollDirection;
setIsOverlayVisible(false); setIsOverlayVisible(false);
setShowPreview(false);
switch (direction) { switch (direction) {
case ScrollDirection.X: case ScrollDirection.X:
@@ -259,6 +261,7 @@ export class ReaderControls {
userReaderStatePagesContext(); userReaderStatePagesContext();
const { previousChapter, nextChapter } = useReaderStateChaptersContext(); const { previousChapter, nextChapter } = useReaderStateChaptersContext();
const { setIsVisible: setIsOverlayVisible } = useReaderOverlayContext(); const { setIsVisible: setIsOverlayVisible } = useReaderOverlayContext();
const { setShowPreview } = useReaderTapZoneContext();
const { readingDirection, readingMode } = ReaderService.useSettings(); const { readingDirection, readingMode } = ReaderService.useSettings();
const openChapter = ReaderControls.useOpenChapter(); const openChapter = ReaderControls.useOpenChapter();
@@ -290,6 +293,7 @@ export class ReaderControls {
if (hideOverlay) { if (hideOverlay) {
setIsOverlayVisible(false); setIsOverlayVisible(false);
setShowPreview(false);
} }
const hideTransitionPage = () => setTransitionPageMode(ReaderTransitionPageMode.NONE); const hideTransitionPage = () => setTransitionPageMode(ReaderTransitionPageMode.NONE);
@@ -501,6 +505,7 @@ export class ReaderControls {
scrollElement, scrollElement,
openChapter, openChapter,
setIsOverlayVisible, setIsOverlayVisible,
setShowPreview,
); );
} else { } else {
openPage('previous', 'ltr'); openPage('previous', 'ltr');
@@ -517,6 +522,7 @@ export class ReaderControls {
scrollElement, scrollElement,
openChapter, openChapter,
setIsOverlayVisible, setIsOverlayVisible,
setShowPreview,
); );
} else { } else {
openPage('next', 'ltr'); openPage('next', 'ltr');

View File

@@ -26,6 +26,7 @@ import {
import { ReaderStatePages } from '@/modules/reader/types/ReaderProgressBar.types.ts'; import { ReaderStatePages } from '@/modules/reader/types/ReaderProgressBar.types.ts';
import { ReaderControls } from '@/modules/reader/services/ReaderControls.ts'; import { ReaderControls } from '@/modules/reader/services/ReaderControls.ts';
import { coerceIn } from '@/lib/HelperFunctions.ts'; import { coerceIn } from '@/lib/HelperFunctions.ts';
import { TReaderTapZoneContext } from '@/modules/reader/types/TapZoneLayout.types.ts';
export const getInitialReaderPageIndex = ( export const getInitialReaderPageIndex = (
resumeMode: ReaderResumeMode, resumeMode: ReaderResumeMode,
@@ -312,6 +313,8 @@ export const useReaderHorizontalModeInvertXYScrolling = (
export const useReaderHideOverlayOnUserScroll = ( export const useReaderHideOverlayOnUserScroll = (
isOverlayVisible: boolean, isOverlayVisible: boolean,
setIsOverlayVisible: TReaderOverlayContext['setIsVisible'], setIsOverlayVisible: TReaderOverlayContext['setIsVisible'],
showPreview: TReaderTapZoneContext['showPreview'],
setShowPreview: TReaderTapZoneContext['setShowPreview'],
scrollElementRef: MutableRefObject<HTMLDivElement | null>, scrollElementRef: MutableRefObject<HTMLDivElement | null>,
) => { ) => {
useEffect(() => { useEffect(() => {
@@ -319,6 +322,10 @@ export const useReaderHideOverlayOnUserScroll = (
if (isOverlayVisible) { if (isOverlayVisible) {
setIsOverlayVisible(false); setIsOverlayVisible(false);
} }
if (showPreview) {
setShowPreview(false);
}
}; };
scrollElementRef.current?.addEventListener('wheel', handleScroll); scrollElementRef.current?.addEventListener('wheel', handleScroll);
@@ -327,7 +334,7 @@ export const useReaderHideOverlayOnUserScroll = (
scrollElementRef.current?.removeEventListener('wheel', handleScroll); scrollElementRef.current?.removeEventListener('wheel', handleScroll);
scrollElementRef.current?.removeEventListener('touchmove', handleScroll); scrollElementRef.current?.removeEventListener('touchmove', handleScroll);
}; };
}, [isOverlayVisible]); }, [isOverlayVisible, showPreview]);
}; };
export const useReaderAutoScroll = ( export const useReaderAutoScroll = (