Lodash 使用范围而不是数字的完全匹配进行查找



我正在以 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 是一个确切的数字(地板),positionY 是状态对象中的一个属性。问题是当我滚动时,它会跳过许多滚动位置,因为 onScroll 处理程序处理的帧数有限。

这段代码现在正在做的是:

如果Math.floor(event.nativeEvent.contentOffset.y)正好等于状态中的位置 Y 属性值之一,则应记录它。我想这样做:

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

知道如何实现这一点吗?我似乎找不到解决方案,即使在睡过觉之后。

_.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;
}
);
}

最新更新