mouseOver的bubbles是true,rollOver的bubbles是false。
两者的区别,其实要在侦听MOUSE_OUT事件时,变得很明显。
假如一个Canvas中间包含一个Button,比较侦听canvas的MOUSE_OUT和ROLL_OUT事件:
1.canvas.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
这种情况下,鼠标移到button后,鼠标移开button经过canvas时,会触发canvas的MOUSE_OUT和MOUSE_OVER事件。因为MOUSE_OVER/MOUSE_OUT事件是有冒泡阶段的,当button触发事件之后,事件会冒泡传递给父容器(即canvas),所以会触发canvas上的事件。
2.canvas.addEventListener(MouseEvent.ROLL_OUT, rollOutHandler);
这种情况下,鼠标只有移开整个canvas才会触发canvas的ROLL_OUT事件。而即使鼠标移到button上再移开,也不会执行触发canvas的ROLL_OUT事件。因为ROLL_OUT事件不会冒泡往父容器传递。
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class DDDDD extends Sprite
{
public function DDDDD()
{
var bt:Sprite=new Sprite();
bt.graphics.beginFill(0x12d211,1)
bt.graphics.drawRect(0,0,50,50);
bt.graphics.endFill();
var sp:Sprite=new Sprite();
sp.graphics.beginFill(0x123211,1)
sp.graphics.drawRect(0,0,100,100);
sp.graphics.endFill();
sp.addChild(bt);
this.addChild(sp);
sp.addEventListener(MouseEvent.MOUSE_OUT,ddd2);
}
private function ddd2(evt:Event):void{
trace("sp")
}
}
}