今天的工作任务也在继续小修小补,对修复字幕列表滚动状态的问题做了修复,并打算抽象变成一个 Hooks,方便多处容器使用。因为想到 Ref 的即时性,却忘记了 State 改变 UI 状态的准确性,流程运行正确,却发现按钮的展示并没有按照设定值实时改变。
// 滚动容器管理
const { canScroll, setForceDisableScroll, scrollToBottom } = useSubtitleScrollList({
el: scrollWrapperRef.current,
deps: [subtitles],
scrollDeps: [visibleMode],
});
使用起来大概就是这样,canScroll
属性标记根据默认规则是否会自动往下进行滚动,同时代表着手动点击向下滚动的按钮是否是隐藏的。因为默认会自动滚动的情况下就是在底部,在底部的情况下按钮就是不显示的。
el
参数监听某个容器的滚动事件实现状态检测,deps
参数根据依赖变化触发状态检测,scrollDeps
参数根据依赖变化触发自动向下滚动(如果此时是禁止滚动的状态,则不会滚动)
大概思路没有问题,明早调整一下状态应该就可以正式使用了。