diff --git a/apps/readest-app/src/app/reader/components/FoliateViewer.tsx b/apps/readest-app/src/app/reader/components/FoliateViewer.tsx index 552693fd..04fb4032 100644 --- a/apps/readest-app/src/app/reader/components/FoliateViewer.tsx +++ b/apps/readest-app/src/app/reader/components/FoliateViewer.tsx @@ -329,9 +329,9 @@ const FoliateViewer: React.FC<{ } }; - const { handlePageFlip, handleContinuousScroll } = usePagination(bookKey, viewRef, containerRef); - const mouseHandlers = useMouseEvent(bookKey, handlePageFlip, handleContinuousScroll); - const touchHandlers = useTouchEvent(bookKey, handlePageFlip, handleContinuousScroll); + const { handlePageFlip } = usePagination(bookKey, viewRef, containerRef); + const mouseHandlers = useMouseEvent(bookKey, handlePageFlip); + const touchHandlers = useTouchEvent(bookKey, handlePageFlip); const [selectedImage, setSelectedImage] = useState(null); const [selectedTableHtml, setSelectedTableHtml] = useState(null); diff --git a/apps/readest-app/src/app/reader/hooks/useIframeEvents.ts b/apps/readest-app/src/app/reader/hooks/useIframeEvents.ts index c28af508..09c52bec 100644 --- a/apps/readest-app/src/app/reader/hooks/useIframeEvents.ts +++ b/apps/readest-app/src/app/reader/hooks/useIframeEvents.ts @@ -2,24 +2,18 @@ import { useEffect, useRef } from 'react'; import { useReaderStore } from '@/store/readerStore'; import { useBookDataStore } from '@/store/bookDataStore'; import { debounce } from '@/utils/debounce'; -import { ScrollSource } from './usePagination'; import { eventDispatcher } from '@/utils/event'; import { MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from '@/services/constants'; export const useMouseEvent = ( bookKey: string, handlePageFlip: (msg: MessageEvent | React.MouseEvent) => void, - handleContinuousScroll: (source: ScrollSource, delta: number, threshold: number) => void, ) => { const { hoveredBookKey } = useReaderStore(); - const debounceScroll = debounce(handleContinuousScroll, 500); const debounceFlip = debounce(handlePageFlip, 100); const handleMouseEvent = (msg: MessageEvent | React.MouseEvent) => { if (msg instanceof MessageEvent) { if (msg.data && msg.data.bookKey === bookKey) { - if (msg.data.type === 'iframe-wheel') { - debounceScroll('mouse', -msg.data.deltaY, 0); - } if (msg.data.type === 'iframe-wheel') { if (msg.data.ctrlKey) { if (msg.data.deltaY > 0) { @@ -34,10 +28,7 @@ export const useMouseEvent = ( handlePageFlip(msg); } } - } else if (msg.type === 'wheel') { - const event = msg as React.WheelEvent; - debounceScroll('mouse', -event.deltaY, 0); - } else { + } else if (msg.type !== 'wheel') { handlePageFlip(msg); } }; @@ -92,11 +83,7 @@ interface IframeTouchEvent { targetTouches: IframeTouch[]; } -export const useTouchEvent = ( - bookKey: string, - handlePageFlip: (msg: CustomEvent) => void, - handleContinuousScroll: (source: ScrollSource, delta: number, threshold: number) => void, -) => { +export const useTouchEvent = (bookKey: string, handlePageFlip: (msg: CustomEvent) => void) => { const { getBookData } = useBookDataStore(); const { hoveredBookKey, setHoveredBookKey, getViewSettings, getView } = useReaderStore(); @@ -241,7 +228,6 @@ export const useTouchEvent = ( }, }), ); - handleContinuousScroll('touch', deltaY, 30); } touchStartRef.current = null; diff --git a/apps/readest-app/src/app/reader/hooks/usePagination.ts b/apps/readest-app/src/app/reader/hooks/usePagination.ts index 5eea24d6..47da3c4d 100644 --- a/apps/readest-app/src/app/reader/hooks/usePagination.ts +++ b/apps/readest-app/src/app/reader/hooks/usePagination.ts @@ -242,45 +242,6 @@ export const usePagination = ( } }; - const handleContinuousScroll = (mode: ScrollSource, scrollDelta: number, threshold: number) => { - const renderer = viewRef.current?.renderer; - const viewSettings = getViewSettings(bookKey)!; - const bookData = getBookData(bookKey)!; - // Continuous scroll is not supported in pre-paginated layout unless scrolled mode is active - if (bookData.bookDoc?.rendition?.layout === 'pre-paginated' && !viewSettings.scrolled) return; - - if (renderer && viewSettings.scrolled && viewSettings.continuousScroll) { - const doScroll = () => { - // may have overscroll where the start is greater than 0 - if (renderer.start <= scrollDelta && scrollDelta > threshold) { - setTimeout(() => { - viewRef.current?.prev(renderer.start + 1); - }, 100); - // sometimes viewSize has subpixel value that the end never reaches - } else if ( - Math.ceil(renderer.end) - scrollDelta >= renderer.viewSize && - scrollDelta < -threshold - ) { - setTimeout(() => { - viewRef.current?.next(renderer.viewSize - Math.floor(renderer.end) + 1); - }, 100); - } - }; - if (mode === 'mouse') { - // we can always get mouse wheel events - doScroll(); - } else if (mode === 'touch') { - // when the document height is less than the viewport height, we can't get the relocate event - if (renderer.size >= renderer.viewSize) { - doScroll(); - } else { - // scroll after the relocate event - renderer.addEventListener('relocate', () => doScroll(), { once: true }); - } - } - } - }; - useEffect(() => { if (!appService?.isMobileApp) return; @@ -301,6 +262,5 @@ export const usePagination = ( return { handlePageFlip, - handleContinuousScroll, }; }; diff --git a/apps/readest-app/src/app/reader/utils/iframeEventHandlers.ts b/apps/readest-app/src/app/reader/utils/iframeEventHandlers.ts index 77cbb494..207a33af 100644 --- a/apps/readest-app/src/app/reader/utils/iframeEventHandlers.ts +++ b/apps/readest-app/src/app/reader/utils/iframeEventHandlers.ts @@ -201,6 +201,7 @@ export const handleClick = ( footnote: footnote.getAttribute('data-wr-footernote') || footnote.getAttribute('zy-footnote') || + footnote.querySelector('img')?.getAttribute('alt') || footnote.getAttribute('alt') || element?.getAttribute('alt') || '', diff --git a/apps/readest-app/src/components/settings/ControlPanel.tsx b/apps/readest-app/src/components/settings/ControlPanel.tsx index 74aff5f2..07211463 100644 --- a/apps/readest-app/src/components/settings/ControlPanel.tsx +++ b/apps/readest-app/src/components/settings/ControlPanel.tsx @@ -27,7 +27,6 @@ const ControlPanel: React.FC = ({ bookKey, onRegisterRes const viewSettings = getViewSettings(bookKey) || settings.globalViewSettings; const [isScrolledMode, setScrolledMode] = useState(viewSettings.scrolled); - const [isContinuousScroll, setIsContinuousScroll] = useState(viewSettings.continuousScroll); const [scrollingOverlap, setScrollingOverlap] = useState(viewSettings.scrollingOverlap); const [hideScrollbar, setHideScrollbar] = useState(viewSettings.hideScrollbar || false); const [volumeKeysToFlip, setVolumeKeysToFlip] = useState(viewSettings.volumeKeysToFlip); @@ -56,7 +55,6 @@ const ControlPanel: React.FC = ({ bookKey, onRegisterRes const handleReset = () => { resetToDefaults({ scrolled: setScrolledMode, - continuousScroll: setIsContinuousScroll, scrollingOverlap: setScrollingOverlap, hideScrollbar: setHideScrollbar, volumeKeysToFlip: setVolumeKeysToFlip, @@ -95,11 +93,6 @@ const ControlPanel: React.FC = ({ bookKey, onRegisterRes // eslint-disable-next-line react-hooks/exhaustive-deps }, [hideScrollbar]); - useEffect(() => { - saveViewSettings(envConfig, bookKey, 'continuousScroll', isContinuousScroll, false, false); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [isContinuousScroll]); - useEffect(() => { if (scrollingOverlap === viewSettings.scrollingOverlap) return; saveViewSettings(envConfig, bookKey, 'scrollingOverlap', scrollingOverlap, false, false); @@ -242,16 +235,6 @@ const ControlPanel: React.FC = ({ bookKey, onRegisterRes onChange={() => setScrolledMode(!isScrolledMode)} /> -
- {_('Continuous Scroll')} - setIsContinuousScroll(!isContinuousScroll)} - /> -