ux: continue to scroll into next section at the bottom of the scroll view, closes #274 (#282)

This commit is contained in:
Huang Xin
2025-02-01 16:07:13 +01:00
committed by GitHub
parent 7a786478f1
commit 792e8657f7
3 changed files with 16 additions and 1 deletions
@@ -4,7 +4,7 @@ import { BookConfig } from '@/types/book';
import { FoliateView, wrappedFoliateView } from '@/types/view';
import { useReaderStore } from '@/store/readerStore';
import { useParallelViewStore } from '@/store/parallelViewStore';
import { useClickEvent, useTouchEvent } from '../hooks/useClickEvent';
import { useClickEvent, useTouchEvent } from '../hooks/useIframeEvents';
import { useFoliateEvents } from '../hooks/useFoliateEvents';
import { useProgressSync } from '../hooks/useProgressSync';
import { useAutoHideScrollbar } from '../hooks/useAutoHideScrollbar';
@@ -80,6 +80,17 @@ const FoliateViewer: React.FC<{
const docRelocateHandler = (event: Event) => {
const detail = (event as CustomEvent).detail;
if (detail.reason !== 'scroll' && detail.reason !== 'page') return;
if (detail.reason === 'scroll') {
const renderer = viewRef.current?.renderer;
if (renderer) {
if (renderer.start <= 0) {
viewRef.current?.prev(1);
} else if (renderer.end >= renderer.viewSize) {
viewRef.current?.next(1);
}
}
}
const parallelViews = getParallels(bookKey);
if (parallelViews && parallelViews.size > 0) {
parallelViews.forEach((key) => {
@@ -95,6 +106,7 @@ const FoliateViewer: React.FC<{
useTouchEvent(bookKey, viewRef);
const { handleTurnPage } = useClickEvent(bookKey, viewRef, containerRef);
useFoliateEvents(viewRef.current, {
onLoad: docLoadHandler,
onRelocate: progressRelocateHandler,
+3
View File
@@ -35,7 +35,10 @@ export interface FoliateView extends HTMLElement {
};
renderer: {
scrolled?: boolean;
size: number;
viewSize: number;
start: number;
end: number;
setAttribute: (name: string, value: string | number) => void;
removeAttribute: (name: string) => void;
next: () => Promise<void>;