如何添加 onscroll 事件侦听器并使用 scrollview 的 ref 获取 Scrollview 的当前滚动位置

How do I add an onscroll event listener and get the current scroll position of a Scrollview using the ref of the scrollview

提问人:jabu404 提问时间:10/25/2023 最后编辑:Adajabu404 更新时间:10/29/2023 访问量:49

问:

我正在使用 react-native-gifted-charts 来实现带有多条线的面积图。

目标:允许用户在图表上水平滚动,但始终显示最小的完整值范围(垂直,y 轴)。即,当视图中的值具有较低的范围时,介于最大值和最小值之间,根据需要自动放大和缩小,并且更多值进入视图框架。

机会:react-native-gifted-charts 为您提供了其内部实现中使用的底层 scrollview 的参考。

麻烦:我知道如何通过将道具作为道具直接附加到滚动视图来添加道具,即onscroll

<Scrollview onscroll={(event) => {}} />

我将能够以这种方式实现我需要实现的一切,但我不知道如何使用 Scrollview 来做到这一点ref

我被困在这里:

const scrollRef = useRef(null)

  const onScroll = useCallback((event) => {
    console.log("🚀 ~ file: EnergyGraph.tsx:1149 ~ onScroll ~ event:", event.target)
    // my logic would go here
  }, [])

  useEffect(() => {
    if (scrollRef?.current) {
      scrollRef.current.addEventListener("scroll", onScroll)
      return () => scrollRef.current.removeEventListener("scroll", onScroll)
    }
  }, [])

  return (
      <LineChart scrollRef={scrollRef} />
)...

但是使用这种方法,我收到错误:addEventListener 不是函数

react-native 事件侦听 react-native-scrollview

评论


答:

0赞 famfamfam 10/25/2023 #1

我认为您必须通过添加道具来编辑此库,将其称为此处
https://github.com/Abhinandan-Kushwaha/react-native-gifted-charts/blob/3ac786c691cb2da6bbb6b280ab62229d6b559179/src/LineChart/index.tsx#L2694-L2704
extraScroll

喜欢这个:

onScroll: (ev: any) => {
      if (
        pointerConfig &&
        pointerConfig.activatePointersOnLongPress &&
        pointerConfig.autoAdjustPointerLabelPosition
      ) {
        setScrollX(ev.nativeEvent.contentOffset.x);
      }
      props.extraScroll && props.extraScroll(ev)
    },

之后,您可以使用此道具在类中处理更多内容extraScroll