Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应本机滑出面板和滚动视图_Javascript_Reactjs_User Interface_React Native - Fatal编程技术网

Javascript 反应本机滑出面板和滚动视图

Javascript 反应本机滑出面板和滚动视图,javascript,reactjs,user-interface,react-native,Javascript,Reactjs,User Interface,React Native,我正在用react native开发一个应用程序。我有一个UI元素,它类似于iOS中的地图元素,你可以从底部滑动一个面板,在里面有一个可滚动的列表 对于滑出式面板,我使用了一个名为rn-slided-up-panel的组件。它有几个作为事件侦听器的道具。比如说 {}/*当它即将被拖动时*/} onDrag={()=>{}/*当拖动它时*/} onDragEnd={()={}/*当用户不再触摸屏幕时*/} > 在它里面,我有一个包含一个来自react native元素的。据我所知,它只有一个通风

我正在用react native开发一个应用程序。我有一个UI元素,它类似于iOS中的地图元素,你可以从底部滑动一个面板,在里面有一个可滚动的列表

对于滑出式面板,我使用了一个名为
rn-slided-up-panel
的组件。它有几个作为事件侦听器的道具。比如说

{}/*当它即将被拖动时*/}
onDrag={()=>{}/*当拖动它时*/}
onDragEnd={()={}/*当用户不再触摸屏幕时*/}
>
在它里面,我有一个
包含一个
来自
react native元素的
。据我所知,它只有一个通风口侦听器,即:

{}>

我的问题是滚动列表实际上会导致面板关闭(它通过向下滑动关闭)。我通过添加一个状态并在Scroll上修改它找到了一个解决方法:

状态={
dragPanel:没错,
}
/*===========================================*/
但是,我找不到恢复拖动的方法,而且它的启动效率也不高


TL;博士


有没有一种有效的方法可以在SlidengPanel中实现ScrollView,而不需要每个重叠的事件?可能使用类似于
函数(e){e.preventDefault();}

要正确禁用/恢复外部滚动拖动,请执行以下操作

\u onGrant(){
this.setState({dragPanel:false});
返回true;
}
_onRelease(){
this.setState({dragPanel:true});
}
建造师(道具){
超级(道具);
this.\u onGrant=this.\u onGrant.bind(this);
this.\u onRelease=this.\u onRelease.bind(this);
这是.\u panResponder=panResponder.create({
onMoveShouldSetPanResponder:这个,
onPanResponderRelease:这个,
onPanResponderTerminate:这个.\u onRelease,
});
}
render(){
}
从我一直在搜索的内容来看,
preventDefault()
是一个纯web javascript的东西,我认为react native中没有
preventDefault


在文档部分,react native只需使用javascript模拟Objc(iOS)和Java(Android)事件。

回答可能会晚些,但使用滚动视图作为绝对位置,并相应定位


将滚动视图视为一个弹出对话框,显示在其后面的背景前面。单击背景后,弹出窗口将关闭。将类似的逻辑应用于该问题,让滚动视图位于向上滑动面板的前面。

将minimumDistanceThreshold属性设置为大约50。小屏幕可能30个,大屏幕可能50-60个。这样做:



谢谢您的回答。据我所知,
\u onGrant()
应该在用户开始滚动时触发,而
\u onRelease()
应该在用户停止滚动时触发。和
this.\u panResponder
相应地启动它们。但是,我应该如何在
中实现它??(也就是说,没有属性名或任何东西?@edvilme
{…this.\u panResponder.panHandlers}
完全符合您的描述。那叫转移道具谢谢。不幸的是,这似乎并不能解决问题。不过,这对我很有帮助,我在句柄中添加了一个事件侦听器,并拒绝在所有滚动事件中拖动。非常感谢。这对我有用。非常感谢。但是,如果ScrollView中有任何子视图,它们也需要添加相同的PanResponder。我还必须将onGrant方法添加到PanResponder onStartShouldSetPanResponder函数的PanResponder中,否则它就是脆弱的。