MouseEvent.ROLL_OVER和MouseEvent.MOUSE_OVER的区别

本站原创文章,转载请注明: 转载自zrong's Blog,原文 MouseEvent.ROLL_OVER和MouseEvent.MOUSE_OVER的区别,欢迎使用文章源码进行转载。

本站转载文章会标明[转],转载请注明原始作者文章地址。



在MouseEvent中,ROLL_OVER和MOUSE_OVER、ROLL_OUT和MOUSE_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;
		}
	}
}

发表评论


请输入上面的验证码