Lodash找到一个范围而不是数字的精确匹配

时间:2018-03-09 16:05:40

标签: javascript reactjs react-native

我在react-native中实现了一个系统,我使用onScroll处理程序来检测视口顶部的Y偏移量。当前滚动位置等于存储在单独对象中的数字时,必须检测它。

这是我现在的代码:

onActivitiesScroll = (event) => {
    let positionYTrack = _.find(
        this.state.trackHeaderCardPositionsY,
        { positionY: Math.floor(event.nativeEvent.contentOffset.y) }
    );

    console.log(positionYTrack);
}

问题出在这一部分:{ positionY: Math.floor(event.nativeEvent.contentOffset.y) }

event.nativeEvent.contentOffset.y是精确数字(floored),positionY是状态对象中的属性。问题是当我滚动时,它会跳过许多滚动位置,因为onScroll处理程序处理的帧数有限。

此代码现在正在做的是:

如果Math.floor(event.nativeEvent.contentOffset.y) 完全等于状态中的某个positionY属性值,则应记录它。我想这样做:

如果Math.floor(event.nativeEvent.contentOffset.y)在当前位置 - 10和当前位置+ 10的范围内,它应该检测到它。

知道如何实现这一目标吗?我似乎无法为此找到解决方案,即使在睡过它之后也是如此。

1 个答案:

答案 0 :(得分:1)

_.find也接受比较值的函数。这是一个简单的示例,您可以使用它来查找y是否在范围内:

onActivitiesScroll = (event) => {
    let positionYTrack = _.find(
        this.state.trackHeaderCardPositionsY,
        position => {
            const y = Math.floor(event.nativeEvent.contentOffset.y);
            const min = y - 10;
            const max = y + 10;
            return min >= position <= max;
        }
    );
}