React学习笔记(5)--事件
2015-09-30 10:58
501 查看
分类: web前端2015-08-29 08:42 33人阅读 评论(0) 收藏 举报
1.事件处理函数的使用
组件:
React 自有方法
用户定义方法
事件处理函数可以接受event参数;
如之前用过的:
[html] view plaincopy
//监听内容的变化并且记录在状态中
handleChange: function(event){
this.setState({inputText: event.target.value});
},
//添加提交按钮并打印结果
handleSubmit: function () {
console.log("reply To" + this.props.selectName + "\n"
+ "\n" + this.state.inputText);
},
编写完事件后需要绑定事件处理函数
如:
[html] view plaincopy
onChange={this.handleChange}
[html] view plaincopy
<pre class="html" name="code">onChange={this.handleChange}
事件;
1》触摸类事件:只会在移动设备中产生,对手的移动位置进行检测并做出响应
onTouchCancel:
onTouchEnd
onTouchMove
onTouchStart
2》键盘类事件:
onKeyDown
onKeyUp
onKeyPress
3》剪切类事件
onCopy
onCut
onPaste
4》 表单类事件
onChange
onInput
onSubmit
5》 焦点类事件
onFocus : 获得焦点
onBlur : 失去焦点
6》UI元素: 元素或页面的滚动事件
onScroll
7》滚动事件:监听滚动位置,方向
onWheel
8》鼠标类事件:
onClick
onContextMenu :右键,上下文菜单
onDoubleClickc
onMouseEnter
onMouseDown
onMouseLeave
onMouseMove
onMouseOut
onMouseOver
onMouseUp
9》鼠标拖拽事件: 上传内容
onDrop
onDrag
onDragEnd
onDragEnter
onDragExit
onDragLeave
onDragOver
onDragStart
实例1:
[html] view plaincopy
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="build/react.js"></script>
<script src="build/JSXTransformer.js"></script>
</head>
<body>
<script type="text/jsx">
var style = {
color : "red",
border: "1px #000 solid"
};
var HelloWorld = React.createClass({
handleChange: function (event) {
console.log(event.target.value);
},
render: function () {
return <div>
<input onChange={this.handleChange} />
</div>;
},
});
React.render(<div style={style}>
<HelloWorld></HelloWorld>
</div>, document.body);
</script>
</body>
</html>
2 事件对象:
[html] view plaincopy
event.target.value
target:事件对象的属性, 事件应得DOM元素
事件对象的属性:
1》通用属性
boolean bubbles : 事件是否可以冒泡
boolean cancelable : 事件是否可以取消
DOMEventTarget currentTarget :
boolean defaultPrevented : 事件是否禁止默认行为
number eventPhase : 事件所处的阶段
boolean isTrusted : 事件是否可信,可信事件即用户自定义触发的事件,不可信事件即用js代码触发的事件
DOMEvent nativeEvent 使用原生的浏览器发出的事件对象
void preventDefault() : 禁止默认行为
void stopPropagation() : 禁止冒泡
DOMEventTarget target:
number timeStamp
string type
2》不同事件对象特有的属性
i 剪切事件:
DOMDataTransfer clipboardDate : 得到剪切数据
ii 键盘事件:
boolean altKey ; 是否按下alt键
Number charCode ;按键的编码; 字符编码
boolean ctrlKey ;是否按下ctrl键
function getModifierState(key) ; 是否按下辅助按键ctrl,shift
String key
Number keyCode; 按键编码;非字符
String locale ; 本地化的字符串
Number location ;位置
boolean metaKey; win键
boolean repeat ;按键是否重复
boolean shiftKey; 是否按下shift
Number which ; 通用化的charCode和keyCode
iii 焦点
DOMEventTarget relatedTarget : 相关的角度
iv 鼠标事件
boolean altKey;
Number button;
Number buttons;
Number clientX;
Number clientY; 当前鼠标所处的坐标, 顶点是浏览器窗口的左上角
boolean ctrlKey
function getModifierState(key);
boolean metaKey;
Number pageX
Number pageY; 顶点时html页面的左上角
DOMEventTarget relatedTarget ;
Number screenX;
Number scrrenY; p
boolean shiftKey;
v 触摸事件:
boolean altKey
DOMTouchList changedTouchs
boolean ctrlKey
function getModifierState(Key)
boolean metaKey
boolean shiftKey
DOMTouchList targetTouches
DOMTouchList touches
vi UI元素
Number detail : 滚动的距离
DOMAbstractView view : 视图
vii 滚动:
Number deltaMode: 单位
Number deltaX
Number deltaY
Number deltaZ 在坐标轴上对应的位置
实例1
[html] view plaincopy
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="build/react.js"></script>
<script src="build/JSXTransformer.js"></script>
</head>
<body>
<script type="text/jsx">
var HelloWorld = React.createClass({
getInitialState: function () {
return{
backgroundColor:'#FFFFFF'
}
},
handleWheel: function (event) {
var newColor=(parseInt(this.state.backgroundColor.substr(1),16) +
event.deltaY * 997).toString(16);
newColor = '#' + newColor.substr(newColor.length - 6).toUpperCase();
this.setState({
backgroundColor: newColor
});
},
render: function () {
console.log(this.state);
return <div onWheel={this.handleWheel} style={this.state}>
<p>Hello World</p>
</div>;
},
});
React.render(
<HelloWorld></HelloWorld>
, document.body);
</script>
</body>
</html>
实例2
[html] view plaincopy
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="build/react.js"></script>
<script src="build/JSXTransformer.js"></script>
</head>
<body>
<script type="text/jsx">
var HelloWorld = React.createClass({
getInitialState: function () {
return {
password: ''
}
},
handleKeyPress: function (event) {
this.setState({
password: this.state.password + event.which
});
console.log(this.state)
},
handleChange: function (event) {
event.target.value = '';
},
render: function () {
return <div>
<input onKeyPress={this.handleKeyPress} onChange={this.handleChange}/>
<p style={{'display':this.state.password.indexOf('495051')>=0 ? 'inline'
:'none'
}}>You got it</p>
</div>
},
});
React.render(
<HelloWorld></HelloWorld>
, document.body);
</script>
</body>
</html>
3 事件和状态关联
this.setState()
实例1:
[html] view plaincopy
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="build/react.js"></script>
<script src="build/JSXTransformer.js"></script>
</head>
<body>
<script type="text/jsx">
var HelloWorld = React.createClass({
getInitialState: function () {
return {
x:0,
y:0
}
},
handleMouseMove: function (event) {
this.setState({
x:event.clientX,
y:event.clientY
})
},
render: function () {
return <div onMouseMove={this.handleMouseMove} style={{
height:'1000px',
width:'700px',
backgroundColor: 'gray'
}}>
{this.state.x + ', ' + this.state.y}
</div>
},
});
React.render(
<HelloWorld></HelloWorld>
, document.body);
</script>
</body>
</html>
视频课程: 极客学院
相关文章推荐
- ReactJS读书笔记一:深入理解JSX
- react经验
- React显示和提交数据
- 细说ReactiveCocoa的冷信号与热信号(二):为什么要区分冷热信号
- 细说ReactiveCocoa的冷信号与热信号(一)
- 最快让你上手ReactiveCocoa之进阶篇
- 最快让你上手ReactiveCocoa之基础篇
- React的React Native
- ReactJs 技巧
- ReactJS
- ReactJs之render
- ReactiveCocoa & MVVM 学习总结一
- ReactJs之表单处理
- React Native -- Flexbox
- ReactiveCocoa & MVVM 学习总结二
- React 入门实例教程
- react-native —— 在Windows下搭建React Native Android开发环境
- Mutations #Facebook Relay文档翻译#
- ReactiveCocoa2 源码浅析
- Facebook发布React Native for Android