关于事件冒泡:useCapture 抛砖引玉

关于事件冒泡:useCapture 抛砖引玉,本屌有话说,为何跟我想象的不一样呢
1、注册鼠标按下事件
this.node.on(Node.EventType.MOUSE_DOWN, (event)=>{
console.log(“监听1___________”,event);
},this, true);
this.node.on(Node.EventType.MOUSE_DOWN, (event)=>{
console.log(“监听2___________”,event);
},this, false);
this.node.on(Node.EventType.MOUSE_DOWN, (event:EventMouse)=>{
console.log(“监听3___________”,event);
},this, true);
this.node.emit(Node.EventType.MOUSE_DOWN, “cocos牛逼”)
1)默认输出结果为:
监听2___________ cocos牛逼
2)鼠标按下输出结果为:
监听1___________ cocos牛逼
监听2___________ cocos牛逼
监听3___________ cocos牛逼

2、useCapture:全部为true
输出结果为:
监听1___________ cocos牛逼
监听2___________ cocos牛逼
监听3___________ cocos牛逼

于是乎我又按照官方的描述:
同时您可以将事件派发到父节点或者通过调用 stopPropagation 拦截它,无奈并未找到该方法。

至此让本来还略懂的冒泡机制 瞬间感觉彷徨了,还请大神不吝赐教!

说明下目的:为了在多种监听同时存在时,某些情况下不希望触发其他监听,通过其他方式自然方便实现,但此处既然能控制冒泡,为何不用呢,故有此疑惑

stopPropagation是事件对象的函数,不是节点的函数。
不知道接口是不是改了,可以看下事件对象的propagationStopped属性。
可以关于捕获参考一下这个。
http://www.imooc.com/wiki/Javascriptbase/eventflow.html
事件先是从根节点到目标节点(称为捕获阶段),到达目标节点,再回朔到根节点(称为冒泡阶段)。冒泡是在到达目标节点之后的回朔阶段响应事件,捕获则是在到达目标节点之前。
例如:通过这个参数,A是B的父节点,B是按钮。A想代理所有它的子节点的节点事件,则可以使用useCapture参数,并在响应事件时阻止冒泡。你点B按钮就没用了。

1赞

酷,感谢,propagationStopped确实找到,很详细,我去测试下!