diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-10-09 12:33:08 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-10-09 12:33:08 +0900 |
| commit | 27c056cbbf6e85a033e85adbafd95a179a9db755 (patch) | |
| tree | d38be1c8fd56bf3d3a6f6a078f643b75292a7dfc /src/client/scripts/scroll.ts | |
| parent | :art: (diff) | |
| download | sharkey-27c056cbbf6e85a033e85adbafd95a179a9db755.tar.gz sharkey-27c056cbbf6e85a033e85adbafd95a179a9db755.tar.bz2 sharkey-27c056cbbf6e85a033e85adbafd95a179a9db755.zip | |
tweak ui
Diffstat (limited to 'src/client/scripts/scroll.ts')
| -rw-r--r-- | src/client/scripts/scroll.ts | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/client/scripts/scroll.ts b/src/client/scripts/scroll.ts index bc6d1530c5..621fe88105 100644 --- a/src/client/scripts/scroll.ts +++ b/src/client/scripts/scroll.ts @@ -1,3 +1,5 @@ +type ScrollBehavior = 'auto' | 'smooth' | 'instant'; + export function getScrollContainer(el: Element | null): Element | null { if (el == null || el.tagName === 'BODY') return null; const overflow = window.getComputedStyle(el).getPropertyValue('overflow'); @@ -45,21 +47,25 @@ export function onScrollBottom(el: Element, cb) { container.addEventListener('scroll', onScroll, { passive: true }); } -export function scroll(el: Element, top: number) { +export function scroll(el: Element, options: { + top?: number; + left?: number; + behavior?: ScrollBehavior; +}) { const container = getScrollContainer(el); if (container == null) { - window.scroll({ top: top, behavior: 'instant' }); + window.scroll(options); } else { - container.scrollTop = top; + container.scroll(options); } } -export function scrollToTop(el: Element) { - scroll(el, 0); +export function scrollToTop(el: Element, options: { behavior?: ScrollBehavior; } = {}) { + scroll(el, { top: 0, ...options }); } -export function scrollToBottom(el: Element) { - scroll(el, 99999); // TODO: ちゃんと計算する +export function scrollToBottom(el: Element, options: { behavior?: ScrollBehavior; } = {}) { + scroll(el, { top: 99999, ...options }); // TODO: ちゃんと計算する } export function isBottom(el: Element, asobi = 0) { |