js中,ul中有多个li,只要将事件绑定在ul上(绑定一次),无需在li上多次绑定,然后通过e.target可获取到点击的是哪个li。
现在场景如下:在creator中,将touchstart事件绑定在父节点scrollview上,里面有多个子节点,发生touch事件时,想获取到具体touch了哪个子节点,可以利用事件委托实现吗?
我自己写的case中e.target始终都是父节点
js中,ul中有多个li,只要将事件绑定在ul上(绑定一次),无需在li上多次绑定,然后通过e.target可获取到点击的是哪个li。
现在场景如下:在creator中,将touchstart事件绑定在父节点scrollview上,里面有多个子节点,发生touch事件时,想获取到具体touch了哪个子节点,可以利用事件委托实现吗?
我自己写的case中e.target始终都是父节点
写个demo研究了下冒泡,看了下 v2.4.6 和 v3.4.2,都不可以实现像h5中的事件委托。
注意:打印event.currentTarget 得打印全,只打印event的话,看到的是事件流结束后的值。
节点结构:

情况一(子节点不在父节点范围内):

(1)父节点B11注册捕获阶段和冒泡阶段touchend事件;C111、C112、C113不注册touchend事件。
点击C111、C112、C113;未触发B11 注册的捕获阶段和冒泡阶段touchend事件,所以没法用event.currentTarget。
(2)那三个C随便注册个事件,正常走CCC里面的事件流。但我事件委托的目的就是不想给子节点注册监听事件。。。
情况二(子节点在父节点范围内):

(1)父节点B11注册捕获阶段和冒泡阶段touchend事件;C111、C112、C113不注册touchend事件。
点击C111、C112、C113;触发B11 注册的捕获阶段和冒泡阶段touchend事件,但是 B11触发时处于目标阶段(event.eventPhase == Event.AT_TARGET == 2 ),e.currentTarget == e.target == B11。 e.currentTarget 根本就不会出现 C111、C112、C113值。
(2)那三个C随便注册个事件,正常走CCC里面的事件流。
CCC事件冒泡使用
)牛逼啊。。。。。