You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Radix UI ScrollArea移动端scrollTop始终为0,保存滚动位置失效问题求助

Radix UI ScrollArea移动端scrollTop始终为0,保存滚动位置失效问题求助

大家好,我最近在使用Radix UI的ScrollArea组件时遇到了个头疼的问题:桌面端用着一切正常,但在移动设备上,打印出来的scrollTop始终是0。我能确定手势是被识别到的——因为加了touchstart监听后handleScroll确实触发了,但就是拿不到正确的滚动距离,感觉问题可能出在Radix的Viewport上?

我的实现代码如下:

const ScrollArea = React.forwardRef<
  React.ElementRef<typeof ScrollAreaPrimitive.Root>,
  ScrollAreaProps
>(({ className, children, storageKey, resetCondition, ...props }, ref) => {
  const scrollRef = React.useRef<HTMLDivElement>(null)

  React.useEffect(() => {
    const handleScroll = () => {
      console.log("Scroll detected", scrollRef.current?.scrollTop)
    }

    const scrollElement = scrollRef.current
    if (scrollElement) {
      scrollElement.addEventListener("scroll", handleScroll)
      scrollElement.addEventListener("touchstart", handleScroll)
    }

    return () => {
      if (scrollElement) {
        scrollElement.removeEventListener("scroll", handleScroll)
        scrollElement.removeEventListener("touchstart", handleScroll)
      }
    }
  }, [])

  return (
    <ScrollAreaPrimitive.Root
      ref={ref}
      className={cn("relative overflow-hidden", className)}
      {...props}
    >
      <ScrollAreaPrimitive.Viewport
        ref={scrollRef}
        className="h-full w-full rounded-[inherit]"
      >
        {children}
      </ScrollAreaPrimitive.Viewport>
      <ScrollBar />
      <ScrollAreaPrimitive.Corner />
    </ScrollAreaPrimitive.Root>
  )
})

我之前尝试过保存滚动位置,但在移动端完全没效果,有没有大佬能帮忙分析下这是Radix组件本身的问题,还是我的实现哪里写错了?

备注:内容来源于stack exchange,提问作者Amir Hegazy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:28:10