React Native中pointerEvent属性
在React Native界面开发中,如果使用绝对定位布局,在代码运行时的某个时刻有可能会遮盖住它的下方的某个组件。这是因为绝对定位只是说这个组件的位置由它父组件的边框决定。 如果被遮盖住的组件需要处理触摸事件。比如我们在一个地图组件上覆盖了一个图像组件用来显示信息,又不想让这个图像组件影响用户手指拖动地图的操作,这时就需要使用图像组件从View组件继承得到的pointerEvents属性来解决这个问题. 下面是示例代码: import React,{ Component } from 'react';
import {
AppRegistry,StyleSheet,Text,View
} from 'react-native';
class AwesomeProject extends Component {
constructor(props) {
super(props); //必须有这句代码 父组件向子组件传递属性,比如styles属性等
this.state = {
bigButtonPointerEvents: null //状态机变量控制大按钮是否工作
};
this.onBigButtonPressed = this.onBigButtonPressed.bind(this);
this.onSmallButtonPressed = this.onSmallButtonPressed.bind(this);
}
onBigButtonPressed() {
console.log('Big button pressed');
}
onSmallButtonPressed() {
if (this.state.bigButtonPointerEvents === null) {
console.log('big button will not responde');
this.setState({bigButtonPointerEvents: 'none'});//改变状态机变量
return;
}
console.log('big button will responde');
this.setState({bigButtonPointerEvents: 'box-none'});//改变状态机变量
}
render() {
return (
//根View
<View style={styles.container}
pointerEvents='box-none'>
<Text style={styles.sButtonStyle}
onPress={this.onSmallButtonPressed}>
SmallButton
</Text>
<View style={styles.bButtonStyle}
pointerEvents={this.state.bigButtonPointerEvents}>
<Text style={{flex:1,fontSize: 20}}
onPress={this.onBigButtonPressed}
>
BigButton
</Text>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: { //根View样式
flex: 1
},sButtonStyle: { // 小按钮的样式
fontSize: 20,left: 130,top: 50,width: 150,height: 35,backgroundColor: 'green'
},bButtonStyle: { //大按钮的样式
left: 130,height: 70,backgroundColor: 'grey',alignItems: 'center',}
});
AppRegistry.registerComponent('AwesomeProject',() => AwesomeProject);
运行效果: 运行结果: PS: 本来大按钮并没有单独用一个View组件嵌套,直接把pointerEvent属性定义在大按钮的Text组件上,在Android设备上发现没有效果,有点不明觉厉了,不知道是RN的Bug还是Android就是这种机制,请大神解答了 更多精彩内容,欢迎关注公众账号 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用ajax+dom+php+mysql实现多级联动(省市县)
- react-native试玩(18)-开关控件
- Swift CoreData增删改查
- Ruby中任务构建工具rake的入门学习教程
- c# – 使用Nodatime将UTC时间转换为本地时间
- 在Oracle Exadata Compute node和Storage cell上能否安装第
- OEL5.5(64bit)安装Oracle 11g R2 RAC教程(图文并茂超详细)
- 在vagrant rbenv NoMethodError loaded_recipe上安装ruby 1
- 轻松入门React和Webpack
- 又升级了自己写的在线编辑器,给它加了正则表达式查找替换功