diff --git a/src/components/ScrollArea.tsx b/src/components/ScrollArea.tsx index 899d8d4..51474c4 100644 --- a/src/components/ScrollArea.tsx +++ b/src/components/ScrollArea.tsx @@ -2,6 +2,7 @@ import cx from 'clsx'; import { clamp } from 'es-toolkit'; import { Component, + createEffect, createMemo, createSignal, JSX, @@ -27,9 +28,9 @@ const ScrollBar: Component = (props) => { const [thumbPos, setThumbPos] = createSignal(0); const [isDragging, setIsDragging] = createSignal(false); - const thumbPos = createMemo(() => { + createEffect(() => { if (props.scrollMax <= 0) { - return 0; + setThumbPos(0); } const scrollPercent = props.scrollPos / props.scrollMax; @@ -37,10 +38,11 @@ const ScrollBar: Component = (props) => { const trackSize = props.axis === 'y' ? track.clientHeight : track.clientWidth; if (trackSize < thumbSize) { - return 0; + setThumbPos(0); } - return scrollPercent * (trackSize - thumbSize); + const pos = scrollPercent * (trackSize - thumbSize); + setThumbPos(pos); }); const thumbStyle = createMemo(() => ({ [props.axis === 'y' ? 'top' : 'left']: `${thumbPos()}px`,