• React 事件总结


    一 绑定事件处理函数

    1.1 鼠标类

    1. onContextMenu
    2. onClick
    3. onDoubleClick
    4. onMouseDown
    5. onMouseUp
    6. onMouseEnter
    7. onMouseLeave
    8. onMouseMove
    9. onMouseOut
    10. onMouseOver

    1.2 拖拽事件:

    1. onDrop
    2. onDrag
    3. onDragStart
    4. onDragEnd
    5. onDragEnter
    6. onDragLeave
    7. onDragOver
    8. onDragExit

    1.3 触摸

    触摸只会在移动设备上产生

    1. onTouchStart
    2. onTouchEnd
    3. onTouchMove
    4. onTouchCancel

    1.4 键盘

    onKeyPressonKeyDownonKeyUp的组合

    1. onKeyPress
    2. onKeyDown
    3. onKeyUp

    1.5 剪切类

    对应的是我们常常使用的复制、剪切和粘贴

    1. onCopy
    2. onCut
    3. onPaste

    1.6 表单类

    (会专门总结表单类事件,在此仅仅简单列出)

    1. onChange
    2. onInput
    3. onSubmit

    onChange可以用在输入框、单选框、下拉列表里,每当内容发生变化时我们都能获得通知。
    onInput使用在文字输入。
    onSubmit是用在整个表单的输入提交,常用在禁止表单的默认操作。

    1.7 焦点事件

    1. onFocus
    2. onBlur

    1.8 UI元素类

    1. onScroll

    滚动事件触发的时候会触发onScroll事件

    1.9 滚动

    1. onWheel

    鼠标滚轮触发的事件,监听滚动幅度,滚动方位

    1.10 组成事件

    1. onCompositionEnd
    2. onCompositionStart
    3. onCompositionUpdate

    1.11 图片类

    1. onLoad
    2. onError

    1.12 多媒体类

    1. onAbort
    2. onCanPlay
    3. onCanPlayThrough
    4. onDurationChange
    5. onEmptied
    6. onEncrypted
    7. onEnded
    8. onError
    9. onLoadedData
    10. onLoadedMetadata
    11. onLoadStart
    12. onPause
    13. onPlay
    14. onPlaying
    15. onProgress
    16. onRateChange
    17. onSeeked
    18. onSeeking
    19. onStalled
    20. onSuspend
    21. onTimeUpdate
    22. onVolumeChange
    23. onWaiting

    二 事件池

    虚拟事件对象已经被合并。这意味着虚拟事件对象将被重新使用,而该事件回调被调用之后所有的属性将无效。这是出于性能的考虑。因此,您不能以异步的方式访问事件。

    function onClick(event) {
      console.log(event); // =>无效的对象
      console.log(event.type); // => "click"
      var eventType = event.type; // => "click"
    
      setTimeout(function() {
        console.log(event.type); // => null
        console.log(eventType); // => "click"
      }, 0);
    
      this.setState({clickEvent: event}); // 不起作用.this.state.clickEvent 将只包含空值.
      this.setState({eventType: event.type}); // 您依然可以导出事件属性
    }
    

    如果您想以一个异步的方式来访问事件属性,您应该对事件调用event.persist()。这将从事件池中取出合成的事件,并允许该事件的引用,使用户的代码被保留。

    三 事件对象

    事件处理器将会传入SyntheticEvent的实例,一个对浏览器本地事件的跨浏览器封装。它有和浏览器本地事件有相同的属性和方法,包括stopPropagation()preventDefault(),但是没有浏览器兼容问题。
    如果因为一些因素,需要底层的浏览器事件对象,只要使用nativeEvent属性就可以获取到它了。

    对于 v0.14,在事件处理函数中返回 false 将不会阻止事件冒泡。取而代之的是在合适的应用场景下,手动调用e.stopPropagation()或者e.preventDefault()。

      handleChange:function(e){
          console.log(e.target.value);
      }
    

    其中target是 事件对象e 是事件对象的属性

    3.1 通用属性

    (以下内容括号内为类型)

    1. bubbles (boolean) 表示事件是否冒泡
    2. cancelable(boolean) 表示事件是否可以取消
    3. currentTarget(DOMEventTarget) 与Target类似,由于事件可以冒泡,所以两者表示的内容是不同的
    4. defaultPrevented(boolean) 表示事件是否禁止了默认行为
    5. eventPhase(number) 表示事件所处的阶段
    6. isTrusted(boolean) 表示事件是否可信。所谓的可信事件表示的是用户操作的事件,不可信事件就是通过JS代码来触发的事件。
    7. nativeEvent(DOMEvent)
    8. preventDefault() (void) 对应的defaultPrevented,表示的是禁止默认行为
    9. stopPropagaTion() (void) 对应的是bubbles,表示的是sh
    10. target(DOMEventTarget)
    11. timeStamp(number) 时间戳,也就是事件触发的事件
    12. type(string) 事件的类型

    3.2 不同事件对象的特有属性

    3.2.1 剪切事件

    1. clipboardData(DOMDataTransfer)表示拿到的数据

    3.2.2 键盘事件

    1. ctrlKey(boolean) 表示是否按下ctrl键
    2. altKey(boolean) 表示是否按下alt键
    3. shiftKey(boolean) 表示是否按下shift
    4. metaKey(boolean) 表示的是win系统下的win键,mac系统下对应的command键
    5. getModifierState(key) (function) 表示是否按下辅助按键(辅助按键就是雷士ctrl、shift等辅助按键)可以传入按键编码来判断是否按下
    6. charCode(Number) 表示的是按键的字符编码,可以通过编码来判断按下的是什么键
    7. key(string) 字符串,按下的键
    8. keyCode(Number) 表示那些不是字符编码的按键
    9. which(Number) 表示经过通用化得charCode和keyCode
    10. locale(String) 表示本地化得一些字符串
    11. location(number) 表示位置
    12. repeat(boolean) 表示按键是否重复

    3.2.3 焦点事件

    1. relatedTarget(DOMEventTarget) 相关焦点对象

    3.2.4 鼠标事件

    1. ctrlKey(boolean)
    2. altKey(boolean)
    3. shiftKey(boolean)
    4. metaKey(boolean)
    5. getModifierState(key) (function)
    6. button(Number)
    7. buttons(Number)
    8. clientX(Number) 原点为浏览器左上角
    9. clinetY(Number) 原点为浏览器左上角
    10. pageX(Number) 原点为HTML页面的左上角
    11. pageY(Number) 原点为HTML页面的左上角
    12. screenX(Number) 原点为显示器的左上角
    13. screenY(Number) 原点为显示器的左上角
    14. relatedTarget(DOMEventTarget)

    3.2.5 触摸事件

    为了使触摸事件生效,在渲染所有组件之前调用 React.initializeTouchEvents(true)

    1. ctrlKey(boolean)
    2. altKey(boolean)
    3. shiftKey(boolean)
    4. metaKey(boolean)
    5. getModifierState(key)
    6. changedTouches(DOMTouchList) 判断手势操作
    7. targetTouches(DOMTouchList) 判断手势操作
    8. touches(DOMTouchList) 判断手势操作

    3.2.6 UI元素事件

    1. detail(Number) 滚动的距离
    2. view(DOMAbstractView) 界面,视窗

    3.2.7 鼠标滚动

    1. deltaMode(Number) 可以理解为移动的单位
    2. deltaX(Number) X轴移动的相对距离固定值
    3. deltaY(Number) Y轴移动的相对距离固定值
    4. deltaZ(Number) Z轴移动的相对距离固定值

    3.3 实例

    3.3.1 滚动事件对象

    var HelloDada = React.creatClass({
        getInitialState:function(){
            return {
                backgroundColor:'#FFFFFF'
            }
        },
        handleWheel:function(e){
            var newColor = (parseInt(this.state.backgroundColor.substr(1),16)+e.deltaY*997).tiString(16);
            this.setState({
                backgroundColor:newColor
            })
        },
        render:function(){
            return <div onWheel={this.handleWheel} style={this.state}>
            <p>Dada Shuaige</p>
            </div>
        }
    });
    ReactDOM.render(<HelloDada />,document.body)
    

    3.3.2 2.键盘事件对象

    var Dada =React.creatClass{
        getInitialState:function(){
            return{
                password:''
            }
        },
        handleKeyPress:function(e){
            this.setState({
                paddword:this.state.password+e.which
            });
        },
        handleChange:function(e){
            e.target.value='';
        },
        render:function(){
            return <div>
            <input onKeyPress={this.handleKeyPress} onChange={this.handleChange} />
            <p style={{
                'display':this.state.password.indexOf('495051') >=0?'block':'none'
            }}>Dada handsomeboy</p>
            </div>
        }
    };
    ReactDOM.render(<Dada />,document.body)
    

    四 事件与状态关联

    状态不仅仅实现了组件内部结果的清晰对应,还实现了组件与用户之间的交互,使用户与组件的行为紧紧结合起来

    handleChange:function(e){
        this.setState({Dada:e.target.value});
    }
    

    this.setState设置状态

    4.1 实例

    var Dada =React.creatClass({
        getInitialState:function(){
            return{
                x:0,
                y:0
            }
        },
        handleMouseMove:function(e){
            this.setState({
                x:e.clientX,
                y:e.clientY
            });
        },
        render:function(){
            return <div onMouseMove={this.handleMouseMove} style={{
                '200px',
                height:'200px',
                backgroundColor:'#999'
            }}>
            {this.state.x+'.'+this.state.y}
            </div>
        }
    });
    ReactDOM.render(<Dada />,document.body)
    
  • 相关阅读:
    Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- ApiWrapper
    Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- Messenger
    Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- AIDL
    Android Stutio -- 编译报错: Error:File path too long on Windows, keep below 240
    Android -- 手势操作识别
    Android -- 屏幕适配
    Android -- android:configChanges
    Java -- Date相关
    Java -- File
    links
  • 原文地址:https://www.cnblogs.com/qiqi715/p/10241905.html
Copyright © 2020-2023  润新知