From 8800791723970248058a876733b9ab0ab7c67b0c Mon Sep 17 00:00:00 2001 From: Gigi Date: Wed, 15 Oct 2025 22:53:47 +0200 Subject: [PATCH] feat: add auto-scroll to reading position setting - Add autoScrollToPosition setting (default: true) - Add checkbox in Layout & Behavior settings - Only auto-scroll when setting is enabled - Allows users to disable auto-scrolling while keeping sync enabled --- src/components/ContentPanel.tsx | 32 +++++++++++-------- .../Settings/LayoutBehaviorSettings.tsx | 13 ++++++++ src/services/settingsService.ts | 1 + 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/components/ContentPanel.tsx b/src/components/ContentPanel.tsx index 28e08ad2..616511e0 100644 --- a/src/components/ContentPanel.tsx +++ b/src/components/ContentPanel.tsx @@ -226,19 +226,25 @@ const ContentPanel: React.FC = ({ if (savedPosition && savedPosition.position > 0.05 && savedPosition.position < 1) { console.log('🎯 [ContentPanel] Restoring position:', Math.round(savedPosition.position * 100) + '%') - // Wait for content to be fully rendered before scrolling - setTimeout(() => { - const documentHeight = document.documentElement.scrollHeight - const windowHeight = window.innerHeight - const scrollTop = savedPosition.position * (documentHeight - windowHeight) - - window.scrollTo({ - top: scrollTop, - behavior: 'smooth' - }) - - console.log('✅ [ContentPanel] Restored to position:', Math.round(savedPosition.position * 100) + '%', 'scrollTop:', scrollTop) - }, 500) // Give content time to render + + // Only auto-scroll if the setting is enabled (default: true) + if (settings?.autoScrollToPosition !== false) { + // Wait for content to be fully rendered before scrolling + setTimeout(() => { + const documentHeight = document.documentElement.scrollHeight + const windowHeight = window.innerHeight + const scrollTop = savedPosition.position * (documentHeight - windowHeight) + + window.scrollTo({ + top: scrollTop, + behavior: 'smooth' + }) + + console.log('✅ [ContentPanel] Restored to position:', Math.round(savedPosition.position * 100) + '%', 'scrollTop:', scrollTop) + }, 500) // Give content time to render + } else { + console.log('⏭️ [ContentPanel] Auto-scroll disabled in settings') + } } else if (savedPosition) { if (savedPosition.position === 1) { console.log('✅ [ContentPanel] Article completed (100%), starting from top') diff --git a/src/components/Settings/LayoutBehaviorSettings.tsx b/src/components/Settings/LayoutBehaviorSettings.tsx index efc17384..b62169fb 100644 --- a/src/components/Settings/LayoutBehaviorSettings.tsx +++ b/src/components/Settings/LayoutBehaviorSettings.tsx @@ -117,6 +117,19 @@ const LayoutBehaviorSettings: React.FC = ({ setting Sync reading position across devices + +
+ +
) } diff --git a/src/services/settingsService.ts b/src/services/settingsService.ts index a36c7879..8f3fbed9 100644 --- a/src/services/settingsService.ts +++ b/src/services/settingsService.ts @@ -56,6 +56,7 @@ export interface UserSettings { paragraphAlignment?: 'left' | 'justify' // default: justify // Reading position sync syncReadingPosition?: boolean // default: false (opt-in) + autoScrollToPosition?: boolean // default: true (auto-scroll to last reading position) } export async function loadSettings(