经常发现有部分flash 开发人员对MouseEvent中的一些事件类型区分不是很清楚,闲来再谈一下flash 中的 MouseEvent 中的ROLL_OVER 和 MOUSE_OVER 的区别,希望能加深认识,废话少说,先直接上代码:
package
{
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.MouseEvent;
[SWF(width = '800',height = '600', backgroundColor = '0x000000')]
public class MouseEventExample extends Sprite
{
public function MouseEventExample()
{
var outContainer :Sprite = new Sprite();
outContainer.graphics.beginFill(0xcccccc);
outContainer.graphics.drawRect(0,0,300,300);
outContainer.graphics.endFill();
this.addChild(outContainer);
outContainer.x = (stage.stageWidth - outContainer.width)/2;
outContainer.y = (stage.stageHeight - outContainer.height)/2;
var inShape :Sprite = new Sprite();
inShape.graphics.beginFill(0xff0000);
inShape.graphics.drawCircle(0,0,50);
inShape.graphics.endFill();
inShape.x = outContainer.width /2;
inShape.y = outContainer.height /2;
outContainer.addChild(inShape);
//
outContainer.addEventListener(MouseEvent.ROLL_OVER,onRollOver);
outContainer.addEventListener(MouseEvent.ROLL_OUT,onRollOut);
outContainer.addEventListener(MouseEvent.MOUSE_OVER,onMouseOver);
outContainer.addEventListener(MouseEvent.MOUSE_OUT,onMouseOut);
}
private function onRollOver(e :MouseEvent):void
{
trace("roll over");
}
private function onRollOut(e :MouseEvent):void
{
trace("roll out");
}
private function onMouseOver(e :MouseEvent):void
{
trace("mouse over");
}
private function onMouseOut(e :MouseEvent):void
{
trace("mouse out");
}
}
}
当鼠标进入容器时 打印出:
roll over
mouse over
进入容器里的元件时 打印出:
mouse out
mouse over
离开容器里的元件时 打印出:
mouse out
mouse over
最后离开容器时 打印出:
mouse out
roll out
由此可见 ROLL_OVER 和 ROLL_OUT 只有在鼠标进入 和 离开 监听的容器才会触发,而经过容器里面的元件子项时不会触发;而MOUSE_OVER 和 MOUSE_OUT 不管是进入和离开容器,还是经过和离开容器中元件子项时,都会触发事件。
分析完毕,希望对各位有所触发