【前言】
您的事件处理程序将传递 SyntheticEvent 的实例,这是一个跨浏览器原生事件包装器。 它具有与浏览器原生事件相同的接口,包括 stopPropagation() 和 preventDefault() ,除了事件在所有浏览器中他们工作方式都相同。
如果您发现由于某种原因需要底层浏览器事件,只需使用 nativeEvent 属性来获取它。 每个 SyntheticEvent 对象都具有以下属性
1 | boolean bubbles |
注意:
从v0.14起,从事件处理程序返回 false 将不再停止事件传播。 应该根据需要手动 e.stopPropagation() 或 e.preventDefault() 。
【事件池】
SyntheticEvent 对象是通过合并得到的。 这意味着在事件回调被调用后,SyntheticEvent 对象将被重用并且所有属性都将被取消。 这是出于性能原因。 因此,您无法以异步方式访问该事件。
1 | function onClick(event) { |
注意:
如果要以异步方式访问事件属性,应该对事件调用 event.persist() ,这将从池中删除合成事件,并允许用户代码保留对事件的引用。
剪贴板事件(Clipboard Events)
1 | onCopy |
合成事件(Composition Events)
1 | onCompositionEnd |
键盘事件(Keyboard Events)
1 | onKeyDown |
焦点事件(Focus Events)
1 | onFocus |
表单事件(Form Events)
1 | onChange |
鼠标事件(Mouse Events)
1 | onClick onContextMenu onDoubleClick onDrag onDragEnd onDragEnter onDragExit |
onMouseEnter 和 onMouseLeave 事件从离开的元素传播到正在进入的元素,而不是普通的冒泡,并且没有捕获阶段。
选择事件(Selection Events)
1 | onSelect |
触摸事件(Touch Events)
1 | onTouchCancel |
UI事件(UI Events)
1 | onScroll |
滚轮事件(Wheel Events)
1 | onWheel |
媒体事件(Media Events)
1 | onAbort onCanPlay onCanPlayThrough onDurationChange onEmptied onEncrypted |
图像事件(Image Events)
1 | onLoad |
动画事件(Animation Events)
1 | onAnimationStart |
转换事件(Transition Events)
1 | onTransitionEnd |
其他事件(Other Events)
1 | onToggle |