MouseEvent.ROLL_OVER和MouseEvent.MOUSE_OVER的区别

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:MouseEvent.ROLL_OVER和MouseEvent.MOUSE_OVER的区别
  • 本文链接:http://zengrong.net/post/1105.htm

在MouseEvent中,ROLL_OVERMOUSE_OVERROLL_OUTMOUSE_OUT 是两对比较相似的事件,它们有什么区别呢?AS3语言参考中是这样解释的:

rollOver 事件的目的是简化带有子级的显示对象容器的移开行为的编码。
当鼠标进入某个显示对象区域或者从其子级以外的对象进入任何其子级区域时,
该显示对象将分派 rollOver 事件。这种行为与 mouseOver 事件的行为不同,
每次鼠标进入显示对象容器的任何子对象区域时都会分派此事件,
即使鼠标已在显示对象容器的另一个子对象上也是如此。

解释得有些拗口,实际上简单说就是: ROLL_OVER 事件无视子对象,只监听根对象的事件。

看了下面演示,就更清楚了。


Get Adobe Flash
player

源码:

package
{
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.text.TextField;

    [SWF(width=350,height=400)]
    public class SimpleSample9 extends Sprite
    {
        private var _spriteChild:Sprite;
        private var _spriteParent:Sprite;
        private var _tf:TextField;
        private var _line:int=0;

        public function SimpleSample9()
        {
            _spriteChild = new Sprite();
            _spriteChild.name = 'child';
            _spriteChild.graphics.beginFill(0x81ADF0);
            _spriteChild.graphics.drawCircle(0, 0, 40);
            _spriteChild.graphics.endFill();

            _spriteParent = new Sprite();
            _spriteParent.name = 'parent';
            _spriteParent.graphics.beginFill(0x0000ff);
            _spriteParent.graphics.drawCircle(0,0, 90);
            _spriteParent.graphics.endFill();

            _spriteParent.addChild(_spriteChild);
            addChild(_spriteParent);
            _spriteParent.x = stage.stageWidth/2;
            _spriteParent.y = _spriteParent.height/2;

            _tf = new TextField();
            _tf.border = true;
            _tf.width = stage.stageWidth;
            _tf.height = stage.stageHeight-_spriteParent.y-_spriteParent.height/2;
            _tf.y = stage.stageHeight - _tf.height;
            addChild(_tf);

            _spriteParent.addEventListener(MouseEvent.MOUSE_OVER, mouseHandler);
            _spriteParent.addEventListener(MouseEvent.MOUSE_OUT, mouseHandler);
            _spriteParent.addEventListener(MouseEvent.ROLL_OVER, mouseHandler);
            _spriteParent.addEventListener(MouseEvent.ROLL_OUT, mouseHandler);  
        }

        private function mouseHandler(evt:MouseEvent):void
        {
            _line++;
            var __ctName:String = evt.currentTarget.name;
            var __tName:String = evt.target.name;
            var __rName:String = evt.relatedObject == null ? 'null' : evt.relatedObject.name;
            _tf.text = _line.toString()+','+(evt.type+',currentTarget:'+__ctName+',target:'+__tName+',relatedObject:'+__rName+'\n') + _tf.text;
        }
    }
}