以下程式會建立兩個 MovieClip,於 stage、root、mc1、mc2 都加入監聽
package {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
public class main extends MovieClip {
public function main():* {
var mc1:MovieClip = new MovieClip();
var mc2:MovieClip = new MovieClip();
mc1.name="MC1";
mc2.name="MC2";
mc1.x = 70;
mc1.y = 40;
mc2.x = 60;
mc2.y = 20;
drawRect(mc1.graphics, 0, 0, 100, 100, 0xFF0000);
drawRect(mc2.graphics, 0, 0, 100, 100, 0x0000FF);
mc1.addChild(mc2);
initEvents(stage);
initEvents(this);
initEvents(mc1);
initEvents(mc2);
this.addChild(mc1);
}
public function initEvents(obj:InteractiveObject):* {
obj.addEventListener(MouseEvent.MOUSE_OVER, handler, false);
obj.addEventListener(MouseEvent.MOUSE_OVER, handler, true);
obj.addEventListener(MouseEvent.MOUSE_OUT, handler, false);
obj.addEventListener(MouseEvent.MOUSE_OUT, handler, true);
obj.addEventListener(MouseEvent.ROLL_OUT, handler, false);
obj.addEventListener(MouseEvent.ROLL_OUT, handler, true);
obj.addEventListener(MouseEvent.ROLL_OVER, handler, true);
obj.addEventListener(MouseEvent.ROLL_OVER, handler, false);
}
public function handler(evtObj:MouseEvent):* {
trace("eventPhase : " + evtObj.eventPhase +
", currentTarget : " + evtObj.currentTarget.name +
", target : " + evtObj.target.name + ", type : " + evtObj.type);
}
static public function drawRect(g:Graphics,x=0,y=0,w=100,h=100,c=0x0):* {
g.lineStyle(1,0x0,1,true);
g.beginFill(c,0.6);
g.drawRect(x,y,w,h);
g.endFill();
}
}
}
// Ticore's Blog - http://ticore.blogspot.com/
以上的程式會在畫面上產生兩個正方形
用滑鼠滑過正方形
會得到以下輸出結果:
eventPhase : 1, currentTarget : null, target : MC1, type : rollOver
eventPhase : 1, currentTarget : root1, target : MC1, type : rollOver
eventPhase : 2, currentTarget : MC1, target : MC1, type : rollOver
eventPhase : 1, currentTarget : null, target : root1, type : rollOver
eventPhase : 2, currentTarget : root1, target : root1, type : rollOver
eventPhase : 1, currentTarget : null, target : MC1, type : mouseOver
eventPhase : 1, currentTarget : root1, target : MC1, type : mouseOver
eventPhase : 2, currentTarget : MC1, target : MC1, type : mouseOver
eventPhase : 3, currentTarget : root1, target : MC1, type : mouseOver
eventPhase : 3, currentTarget : null, target : MC1, type : mouseOver
eventPhase : 1, currentTarget : null, target : MC1, type : mouseOut
eventPhase : 1, currentTarget : root1, target : MC1, type : mouseOut
eventPhase : 2, currentTarget : MC1, target : MC1, type : mouseOut
eventPhase : 3, currentTarget : root1, target : MC1, type : mouseOut
eventPhase : 3, currentTarget : null, target : MC1, type : mouseOut
eventPhase : 1, currentTarget : null, target : MC2, type : rollOver
eventPhase : 1, currentTarget : root1, target : MC2, type : rollOver
eventPhase : 1, currentTarget : MC1, target : MC2, type : rollOver
eventPhase : 2, currentTarget : MC2, target : MC2, type : rollOver
eventPhase : 1, currentTarget : null, target : MC2, type : mouseOver
eventPhase : 1, currentTarget : root1, target : MC2, type : mouseOver
eventPhase : 1, currentTarget : MC1, target : MC2, type : mouseOver
eventPhase : 2, currentTarget : MC2, target : MC2, type : mouseOver
eventPhase : 3, currentTarget : MC1, target : MC2, type : mouseOver
eventPhase : 3, currentTarget : root1, target : MC2, type : mouseOver
eventPhase : 3, currentTarget : null, target : MC2, type : mouseOver
eventPhase : 1, currentTarget : null, target : MC2, type : mouseOut
eventPhase : 1, currentTarget : root1, target : MC2, type : mouseOut
eventPhase : 1, currentTarget : MC1, target : MC2, type : mouseOut
eventPhase : 2, currentTarget : MC2, target : MC2, type : mouseOut
eventPhase : 3, currentTarget : MC1, target : MC2, type : mouseOut
eventPhase : 3, currentTarget : root1, target : MC2, type : mouseOut
eventPhase : 3, currentTarget : null, target : MC2, type : mouseOut
eventPhase : 1, currentTarget : null, target : root1, type : rollOut
eventPhase : 2, currentTarget : root1, target : root1, type : rollOut
eventPhase : 1, currentTarget : null, target : MC1, type : rollOut
eventPhase : 1, currentTarget : root1, target : MC1, type : rollOut
eventPhase : 2, currentTarget : MC1, target : MC1, type : rollOut
eventPhase : 1, currentTarget : null, target : MC2, type : rollOut
eventPhase : 1, currentTarget : root1, target : MC2, type : rollOut
eventPhase : 1, currentTarget : MC1, target : MC2, type : rollOut
eventPhase : 2, currentTarget : MC2, target : MC2, type : rollOut
根據以上資料,分別將 RollOver、RollOut 與 MouseOver、MouseOut 事件流畫成圖片
MouseOver、MouseOut Event Flow:
RollOver、RollOut Event Flow:
AS3 Dispatch Bubble、Non-Bubble Event Flow:
相關連結:
AS3 - MouseOver 與 RollOver 差異性 (1)
AS3 - MouseOver 與 RollOver 差異性 (2)
AS3 MouseEvent.relatedObject
AS3 Cross-Domain Event Flow
AS 3.0 - Mouse Event & mouseEnabled