兩者的區別,其實要在偵聽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")
}
}
}