Egret源码分析-触摸机制

Egret中的触摸机制

距离上次写Egret的东西,已经过了好久。其实这篇文章很早之前就写了一些,但是一直没有整理,所以一直没有发上来。这两天刚好有时间,就整理了下。

所使用的Egret版本:3.0.2。

在Egret中采用了采用冒泡的事件机制(官方有说明:和Flash中的机制类似)。
事件流主要有三个阶段:

  1. 捕获 stage -> node
  2. 目标 node
  3. 冒泡 node -> stage

一个完整的事件流顺序:捕获阶段→目标阶段→冒泡阶段。(stage -> node -> stage)
Egret中触摸事件默认是冒泡的。能否触发,并不是说一定要触摸点落在父节点里,只要目标节点被点中,就可以按这个规则来算

添加一个事件的方法如下:

1
addEventListener(type: string, listener: Function, thisObject: any, useCapture?: boolean, priority?: number)

注意:Egret框架的事件流与Flash实现并不一致。
在Flash中,默认的的事件监听若不开启useCapture将监听目标和冒泡阶段。若开启capture将只能监听捕获但不包括目标的事件。而在Egret中,是包括目标事件的!

  1. 关于捕获
    seCaptureu默认是false: 表示只存在目标和冒泡阶段。
    设为true,则表示只存在捕获阶段和目标阶段(在Flash中则是不包含目标阶段)。
    如果调用两次addEventListener,分别将seCapture设为true 和 false,那么目标状态会触发两次回调

  2. 关于冒泡
    1、子级发送事件冒泡,各层父级不捕获也能接收,即在冒泡阶段接收,顺序为从内至外(子→父);
    2、子级发送事件不冒泡,只有父级捕获,才能接收,即在捕获阶段接收,顺序为从外至内(父→子);

转载本站文章请注明作者(xtutu)和出处 xtutu.me