如何在absolute定位同级元素间传递touch事件,解决Snackbar拦截手势问题
同级绝对定位组件手势透传解决方案
React Native 原生提供了pointerEvents属性用来控制视图的触摸事件响应规则,是实现这个需求的最优方案,具体用法如下:
- 若Snackbar本身不需要任何触摸交互(无点击按钮、无需滑动关闭等操作),直接给Snackbar添加
pointerEvents="none"属性即可,所有触摸事件会直接穿透Snackbar,传递给下层的PressableLayer响应:
<> <PressableLayer></PressableLayer> <Snackbar pointerEvents="none"></Snackbar> </>
- 若Snackbar内部有需要响应交互的子元素(比如操作按钮),将属性值替换为
pointerEvents="box-none"即可:该配置会让Snackbar容器本身不拦截触摸事件,事件可以正常透传给下层组件,同时Snackbar的子元素依然可以正常响应触摸操作,兼顾两侧交互需求。
如果使用的第三方Snackbar组件不支持透传pointerEvents属性,可以采用事件转发方案实现:给两个组件的共同父容器绑定触摸事件监听,在事件触发时判断触摸坐标是否命中PressableLayer的可响应区域,若命中则主动调用PressableLayer对应的触摸处理逻辑即可。
内容的提问来源于stack exchange,提问作者Ljavuras.py
相关产品推荐
相关产品推荐

