scroll only if the entry doesn't entirely fit on screen (same as commafeed v1)

This commit is contained in:
Athou
2022-08-19 08:43:13 +02:00
parent 243aaac3da
commit 051fa37949
3 changed files with 5 additions and 4 deletions

View File

@@ -8,6 +8,8 @@ export const Constants = {
mobileBreakpoint: DEFAULT_THEME.breakpoints.md,
headerHeight: 60,
sidebarWidth: 350,
isTopVisible: (div: HTMLDivElement) => div.getBoundingClientRect().top >= Constants.layout.headerHeight,
isBottomVisible: (div: HTMLDivElement) => div.getBoundingClientRect().bottom <= window.innerHeight,
},
dom: {
mainScrollAreaId: "main-scroll-area-id",

View File

@@ -52,8 +52,7 @@ export function FeedEntries() {
if (selectedEntry) {
if (selectedEntry.expanded) {
const ref = refs.current[selectedEntry.id]
const bottomVisible = ref.getBoundingClientRect().bottom <= window.innerHeight
if (bottomVisible) {
if (Constants.layout.isBottomVisible(ref)) {
dispatch(selectNextEntry())
} else {
const scrollArea = document.getElementById(Constants.dom.mainScrollAreaId)
@@ -73,8 +72,7 @@ export function FeedEntries() {
if (selectedEntry) {
if (selectedEntry.expanded) {
const ref = refs.current[selectedEntry.id]
const topVisible = ref.getBoundingClientRect().top >= Constants.layout.headerHeight
if (topVisible) {
if (Constants.layout.isTopVisible(ref)) {
dispatch(selectPreviousEntry())
} else {
const scrollArea = document.getElementById(Constants.dom.mainScrollAreaId)

View File

@@ -58,6 +58,7 @@ export function FeedEntry(props: FeedEntryProps) {
setTimeout(() => {
if (!ref.current) return
if (!props.expanded) return
if (Constants.layout.isTopVisible(ref.current) && Constants.layout.isBottomVisible(ref.current)) return
document.getElementById(Constants.dom.mainScrollAreaId)?.scrollTo({
// having a small gap between the top of the content and the top of the page is sexier