AS3:辨析ROLL_OVER与MOUSE_OVER,ROLL_OUT与MOUSE_OUT
2012-04-09 17:30
344 查看
ROLL_OVER与MOUSE_OVER的调度的区别
可视组件在鼠标进入该组件时会调度MOUSE_OVER事件,即使是从其子组件移到该组件依然会触发该事件。
可视组件在鼠标从不是其子组件的其余组件中进入该组件时会调度ROLL_OVER事件,直观来看,就是鼠标从外部移入该组件才调用。
ROLL_OUT与MOUSE_OUT的调度的区别
可视组件在鼠标移出该组件时会调度MOUSE_OUT事件,即使是移到该组件的子组件依然会触发该事件。
可视组件在鼠标移到不是其子组件的其余组件中会调度ROLL_OUT事件,直观来看,就是鼠标移到该组件外部才调用。
在含有子组件的可视组件上监听四个事件
鼠标由外部进入母组件时能监听到由母组件调度的ROLL_OVER与MOUSE_OVER事件;
鼠标由母组件进入子组件时能监听到由子组件调度的MOUSE_OVER事件和母组件调度的MOUSE_OUT事件;
此时子组件还调度了ROLL_OVER事件,但是由于ROLL_OVER没有冒泡阶段(详见AS3:事件流机制),因此其母组件不能监听到该事件;
鼠标由子组件移到母组件时能监听到由子组件调度的MOUSE_OUT事件和母组件调度的MOUSE_OVER事件;
同样的,此时子组件还调度了ROLL_OUT事件,但是母组件同样监听不到;
鼠标由母组件移到外部时能监听到由母组件调度的ROLL_OUT与MOUSE_OUT事件;
总结
MOUSE事件与ROLL事件的区别在于如下两点:
鼠标在母组件与子组件上移入移出时是否调度的区别。
MOUSE事件具有冒泡阶段而ROLL事件没有,决定了在子组件调度事件时母组件是否能监听到的区别。
总之,ROLL事件将整个母组件包括其子组件看成一个组件,移入移出整个组件的边界时母组件才调度事件并能监听该事件。
FLASH示例
在母容器设置监听这四个事件,显示内容前一个为调度事件来源,后一个为调度的事件名称。
Java代码
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
public class MouseEvents extends Sprite
{
public function MouseEvents()
{
init();
}
private function init():void
{
var sp:Sprite=new MovieClip();
addChild(sp);
sp.graphics.beginFill(0xff0000);
sp.graphics.drawCircle(0,0,50);
sp.graphics .endFill();
sp.x=stage.stageWidth/2;
sp.y=stage.stageHeight/2;
var sp1:Sprite=new Sprite();
sp.addChild(sp1);
sp1.graphics.beginFill(0xff7700);
sp1.graphics.drawCircle(0,0,25);
sp1.graphics .endFill();
sp.addEventListener(MouseEvent.MOUSE_OVER,onMRO);
sp.addEventListener(MouseEvent.MOUSE_OUT,onMRO);
sp.addEventListener(MouseEvent.ROLL_OVER,onMRO);
sp.addEventListener(MouseEvent.ROLL_OUT,onMRO);
sp.addEventListener(MouseEvent.MOUSE_WHEEL,onMRO);
sp1.addEventListener(MouseEvent.MOUSE_OVER,onMRO);
sp1.addEventListener(MouseEvent.MOUSE_OUT,onMRO);
sp1.addEventListener(MouseEvent.ROLL_OVER,onMRO);
sp1.addEventListener(MouseEvent.ROLL_OUT,onMRO);
sp1.addEventListener(MouseEvent.MOUSE_WHEEL,onMRO);
}
public function onMRO(e:MouseEvent):void
{
trace("目标对象:"+e.target+" 当前对象:"+e.currentTarget+" 事件类型:"+e.type+" 事件阶段:"+e.eventPhase);
}
}
}
鼠标光标移动过程:从舞台空白地方移入sp,再移入sp1,然后再逆向移动。结果如下:
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:rollOver 事件阶段:2
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:mouseOver 事件阶段:2
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:mouseOut 事件阶段:2
目标对象:[object Sprite] 当前对象:[object Sprite] 事件类型:rollOver 事件阶段:2
目标对象:[object Sprite] 当前对象:[object Sprite] 事件类型:mouseOver 事件阶段:2
目标对象:[object Sprite] 当前对象:[object MovieClip] 事件类型:mouseOver 事件阶段:3
目标对象:[object Sprite] 当前对象:[object Sprite] 事件类型:mouseWheel 事件阶段:2
目标对象:[object Sprite] 当前对象:[object MovieClip] 事件类型:mouseWheel 事件阶段:3
目标对象:[object Sprite] 当前对象:[object Sprite] 事件类型:mouseOut 事件阶段:2
目标对象:[object Sprite] 当前对象:[object MovieClip] 事件类型:mouseOut 事件阶段:3
目标对象:[object Sprite] 当前对象:[object Sprite] 事件类型:rollOut 事件阶段:2
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:mouseOver 事件阶段:2
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:mouseOut 事件阶段:2
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:rollOut 事件阶段:2
可视组件在鼠标进入该组件时会调度MOUSE_OVER事件,即使是从其子组件移到该组件依然会触发该事件。
可视组件在鼠标从不是其子组件的其余组件中进入该组件时会调度ROLL_OVER事件,直观来看,就是鼠标从外部移入该组件才调用。
ROLL_OUT与MOUSE_OUT的调度的区别
可视组件在鼠标移出该组件时会调度MOUSE_OUT事件,即使是移到该组件的子组件依然会触发该事件。
可视组件在鼠标移到不是其子组件的其余组件中会调度ROLL_OUT事件,直观来看,就是鼠标移到该组件外部才调用。
在含有子组件的可视组件上监听四个事件
鼠标由外部进入母组件时能监听到由母组件调度的ROLL_OVER与MOUSE_OVER事件;
鼠标由母组件进入子组件时能监听到由子组件调度的MOUSE_OVER事件和母组件调度的MOUSE_OUT事件;
此时子组件还调度了ROLL_OVER事件,但是由于ROLL_OVER没有冒泡阶段(详见AS3:事件流机制),因此其母组件不能监听到该事件;
鼠标由子组件移到母组件时能监听到由子组件调度的MOUSE_OUT事件和母组件调度的MOUSE_OVER事件;
同样的,此时子组件还调度了ROLL_OUT事件,但是母组件同样监听不到;
鼠标由母组件移到外部时能监听到由母组件调度的ROLL_OUT与MOUSE_OUT事件;
总结
MOUSE事件与ROLL事件的区别在于如下两点:
鼠标在母组件与子组件上移入移出时是否调度的区别。
MOUSE事件具有冒泡阶段而ROLL事件没有,决定了在子组件调度事件时母组件是否能监听到的区别。
总之,ROLL事件将整个母组件包括其子组件看成一个组件,移入移出整个组件的边界时母组件才调度事件并能监听该事件。
FLASH示例
在母容器设置监听这四个事件,显示内容前一个为调度事件来源,后一个为调度的事件名称。
Java代码
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
public class MouseEvents extends Sprite
{
public function MouseEvents()
{
init();
}
private function init():void
{
var sp:Sprite=new MovieClip();
addChild(sp);
sp.graphics.beginFill(0xff0000);
sp.graphics.drawCircle(0,0,50);
sp.graphics .endFill();
sp.x=stage.stageWidth/2;
sp.y=stage.stageHeight/2;
var sp1:Sprite=new Sprite();
sp.addChild(sp1);
sp1.graphics.beginFill(0xff7700);
sp1.graphics.drawCircle(0,0,25);
sp1.graphics .endFill();
sp.addEventListener(MouseEvent.MOUSE_OVER,onMRO);
sp.addEventListener(MouseEvent.MOUSE_OUT,onMRO);
sp.addEventListener(MouseEvent.ROLL_OVER,onMRO);
sp.addEventListener(MouseEvent.ROLL_OUT,onMRO);
sp.addEventListener(MouseEvent.MOUSE_WHEEL,onMRO);
sp1.addEventListener(MouseEvent.MOUSE_OVER,onMRO);
sp1.addEventListener(MouseEvent.MOUSE_OUT,onMRO);
sp1.addEventListener(MouseEvent.ROLL_OVER,onMRO);
sp1.addEventListener(MouseEvent.ROLL_OUT,onMRO);
sp1.addEventListener(MouseEvent.MOUSE_WHEEL,onMRO);
}
public function onMRO(e:MouseEvent):void
{
trace("目标对象:"+e.target+" 当前对象:"+e.currentTarget+" 事件类型:"+e.type+" 事件阶段:"+e.eventPhase);
}
}
}
鼠标光标移动过程:从舞台空白地方移入sp,再移入sp1,然后再逆向移动。结果如下:
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:rollOver 事件阶段:2
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:mouseOver 事件阶段:2
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:mouseOut 事件阶段:2
目标对象:[object Sprite] 当前对象:[object Sprite] 事件类型:rollOver 事件阶段:2
目标对象:[object Sprite] 当前对象:[object Sprite] 事件类型:mouseOver 事件阶段:2
目标对象:[object Sprite] 当前对象:[object MovieClip] 事件类型:mouseOver 事件阶段:3
目标对象:[object Sprite] 当前对象:[object Sprite] 事件类型:mouseWheel 事件阶段:2
目标对象:[object Sprite] 当前对象:[object MovieClip] 事件类型:mouseWheel 事件阶段:3
目标对象:[object Sprite] 当前对象:[object Sprite] 事件类型:mouseOut 事件阶段:2
目标对象:[object Sprite] 当前对象:[object MovieClip] 事件类型:mouseOut 事件阶段:3
目标对象:[object Sprite] 当前对象:[object Sprite] 事件类型:rollOut 事件阶段:2
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:mouseOver 事件阶段:2
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:mouseOut 事件阶段:2
目标对象:[object MovieClip] 当前对象:[object MovieClip] 事件类型:rollOut 事件阶段:2
相关文章推荐
- AS3:辨析ROLL_OVER与MOUSE_OVER,ROLL_OUT与MOUSE_OUT
- AS3:辨析ROLL_OVER与MOUSE_OVER,ROLL_OUT与MOUSE_OUT
- AS3:辨析ROLL_OVER与MOUSE_OVER,ROLL_OUT与MOUSE_OUT
- AS3:辨析ROLL_OVER与MOUSE_OVER,ROLL_OUT与MOUSE_OUT
- MOUSE_OVER/MOUSE_OUT与ROLL_OVER/ROLL_OUT的区别
- 简单模拟MouseEvent.ROLL_OUT MouseEvent.ROLL_OVER MouseEvent.MOUSE_MOVE
- MouseOut/MouseOver/RollOut/RollOver事件比照
- 转载:mouseOver/mouseOut 与 rollOver/rollOut的区别
- [转]区别AS3.0中MOUSE_OVER、ROLL_OVER,MOUSE_OUT、ROLL_OUT
- AS3 最好的展示MouseEvent.ROLL_OVER and MouseEvent.MOUSE_OVER 的区别
- Actionscript 3.0事件之Mouse_OVER,MOUSE_OUT,ROLL_OVER,ROLL_OUT的区别
- ROLL_OVER和ROLL_OUT,MOUSE_OVER和 MOUSE_OUT。
- AS3.0中MOUSE_OVER、ROLL_OVER,MOUSE_OUT、ROLL_OUT的区别
- MouseOut/MouseOver/RollOut/RollOver事件比照
- as3 rollOver or mouseOver使用说明
- 解决内部元素onMouseOver/onMouseOut事件冒泡触发父元素的相应事件
- CSS样式里使用JavaScript(onmouseover/onmouseout)
- 对mouseout/mouseleave,mouseover/mouseenter事件的解析
- Three ways to make your WPF images pop out on MouseOver
- Mouseenter/ mouseleave和mouseover/mouseout