diff --git a/scripts/Actions.ts b/scripts/Actions.ts index dcb31d1f..11d5eb77 100644 --- a/scripts/Actions.ts +++ b/scripts/Actions.ts @@ -83,38 +83,38 @@ export function diff(arn: AnimeNotifier, element: HTMLElement) { let url = element.dataset.url || (element as HTMLAnchorElement).getAttribute("href") arn.diff(url).then(() => { - arn.requestIdleCallback(() => { - const duration = 300.0 - const steps = 60 - const interval = duration / steps - const fullSin = Math.PI / 2 - const contentPadding = 24 - - let target = element - let scrollHandle: number - let oldScroll = arn.app.content.parentElement.scrollTop - let newScroll = Math.max(target.offsetTop - contentPadding, 0) - let scrollDistance = newScroll - oldScroll - let timeStart = Date.now() - let timeEnd = timeStart + duration + const duration = 300.0 + const steps = 60 + const interval = duration / steps + const fullSin = Math.PI / 2 + const contentPadding = 24 + + let target = element + let scrollHandle: number + let oldScroll = arn.app.content.parentElement.scrollTop + let newScroll = 0 + let finalScroll = Math.max(target.offsetTop - contentPadding, 0) + let scrollDistance = finalScroll - oldScroll + let timeStart = Date.now() + let timeEnd = timeStart + duration - let scroll = () => { - let time = Date.now() - let progress = (time - timeStart) / duration + let scroll = () => { + let time = Date.now() + let progress = (time - timeStart) / duration - if(progress > 1.0) { - progress = 1.0 - } - - arn.app.content.parentElement.scrollTop = oldScroll + scrollDistance * Math.sin(progress * fullSin) - - if(time >= timeEnd || arn.app.content.parentElement.scrollTop == newScroll) { - clearInterval(scrollHandle) - } + if(progress > 1.0) { + progress = 1.0 } - scrollHandle = setInterval(scroll, interval) - }) + newScroll = oldScroll + scrollDistance * Math.sin(progress * fullSin) + arn.app.content.parentElement.scrollTop = newScroll + + if(time < timeEnd && newScroll != finalScroll) { + window.requestAnimationFrame(scroll) + } + } + + window.requestAnimationFrame(scroll) }) }