【发布时间】:2020-05-11 15:56:34
【问题描述】:
我有一个表格,实际上只是一堆样式化的 View 元素,在 React Native 中如下所示:
我想进行设置,以便用户可以用手指点击任何空框并拖动手指以突出显示这些框。
我已经使用mousedown/mouseover/mouseup 在桌面上使用touchstart/touchmove/touchmove/touchend 为移动浏览器设置了类似的组件的网络版本,但我在 React Native 中创建相同的效果时遇到问题。
在进行了一些搜索之后,我发现了一个名为 PanResponder (https://reactnative.dev/docs/panresponder) 的东西,我怀疑如果设置正确会得到我想要的东西。但是,文档并没有详细解释各种 pan 处理程序是如何工作的。
按照文档中的示例,我编写了以下起始代码:
const panResponder = PanResponder.create({
onStartShouldSetPanResponder: (evt, gestureState) => true,
onStartShouldSetPanResponderCapture: (evt, gestureState) => true,
onMoveShouldSetPanResponder: (evt, gestureState) => true,
onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,
onPanResponderGrant: (evt, gestureState) => {
console.log('onPanResponderGrant gestureState');
// console.log('onPanResponderGrant gestureState', gestureState);
},
onPanResponderMove: (evt, gestureState) => {
console.log('onPanResponderMove gestureState');
// console.log('onPanResponderMove gestureState', gestureState);
},
onPanResponderTerminationRequest: (evt, gestureState) => true,
onPanResponderRelease: (evt, gestureState) => {
console.log('onPanResponderRelease');
},
onPanResponderTerminate: (evt, gestureState) => {
console.log('onPanResponderTerminate');
},
onShouldBlockNativeResponder: (evt, gestureState) => {
return true;
}
});
这样,当我点击特定框并在该框内移动时,我可以触发事件。但是,只要我将手指移到下一个框,onPanResponderTerminate 事件就会触发,而我不会触发任何其他事件。
我的问题是:PanResponder 是否适合用于我想要完成的任务?如果是这样,我需要如何更改它以获得我想要的?如果没有,我应该改用什么?谢谢。
【问题讨论】:
标签: react-native drag panresponder