有一个父节点A,它内部有一个子节点B,两个都是Sprite,A和B都监听了mousedown事件。当鼠标按下B的时候,A的事件监听代码竟然连续响应了2次,一次响应是从B冒泡而来的(currentTarget是B),一次响应是A自己的(currentTarget是A)。如果换成了mousemove和mouseup事件,这种现象就不会出现,A的监听代码只响应一次从B冒泡过来的事件。开始以为是其他代码影响的,后来重新开了一个项目,只写了简单的测试程序,还是这样。所以这个情况是不是bug?如果故意设计成这样,那为什么mousemove和mouseup却不设计成这样呢?求解答!
然后我又做了个多层嵌套节点的测试,A包含B,B包含C,ABC都监听mousedown事件,鼠标点击C,事件响应顺序是这样的:C->B->A->B->A->A,顶层的A的监听程序一共执行了3次,如果不知道这个规则的人,程序的执行逻辑可能会搞混乱。最后我在A的监听程序里加了一个event.stopPropagation()之后,问题就解决了,事件响应就变成了意料之中的顺序:C->B->A。我不明白为什么mousedown事件要设计成这样。