file show: scroll vertically with keyboard arrows

Massimo Melina committed Jul 26, 2023 at 23:09 UTC 982195924afefab06941d69d715057dc6a56c0d8
1 file changed +9 -1
frontend/src/show.ts
+9 -1
@@ -28,6 +28,10 @@ export function fileShow(entry: DirEntry) {
28 return go(-1)
29 if (key === 'ArrowRight')
30 return go(+1)
31 + if (key === 'ArrowDown')
32 + return scrollY(1)
33 + if (key === 'ArrowUp')
34 + return scrollY(-1)
35 if (key === 'd')
36 return location.href = cur.uri + '?dl'
37 if (key === 'z')
@@ -49,7 +53,7 @@ export function fileShow(entry: DirEntry) {
53 const [loading, setLoading] = useState(false)
54 const [failed, setFailed] = useState<false | string>(false)
55 const containerRef = useRef<HTMLDivElement>()
52 - useEffect(() => { containerRef.current?.scrollTo(0,0) }, [cur])
56 + useEffect(() => { scrollY(-1E9) }, [cur])
57 const {t} = useI18N()
58 return h(Fragment, {},
59 h(FlexV, {
@@ -121,6 +125,10 @@ export function fileShow(entry: DirEntry) {
125 function switchZoomMode() {
126 setMode(x => x ? x - 1 : ZoomMode.contain)
127 }
128 +
129 + function scrollY(dy: number) {
130 + containerRef.current?.scrollBy(0, dy * .5 * containerRef.current?.clientHeight)
131 + }
132 }
133 })
134 }