`

[转]区别AS3.0中MOUSE_OVER、ROLL_OVER,MOUSE_OUT、ROLL_OUT

阅读更多
http://www.yaotaiyang.com/latestnews/qubie-MOUSE-a-OVERROLL-a-OVERMOUSE-a-OUTROLL-a-OUT/

殿堂之路上面对这两个事件的说明很详细,我也引用一下书上面的话:

这两个事件都是侦听鼠标指针当前是否在现实对象上方的。所不同的是MouseEvent.ROLL_OVER和MouseEvent.ROLL_OUT事件的bubbles属性为FALSE,意味着这两个事件不参与事件流冒泡。这会带来什么不同呢?举例说明,一个容器有子对象A和B,制定该容器侦听MouseEvent.ROLL_OVER事件,target是A,当鼠标移开一些,离开了子对象A处于子对象B上方时,虽然这时还在容器内,但立刻会发出一个MouseEvent.MOUSE_OUT事件,target是A,随后又会发出一个MouseEvent.MOUSE_OVER事件,target是B,这和我们的想法可能不同,我们原来希望只要鼠标指针还在容器上方,就不应该发出MouseEvent.MOUSE_OUT事件。

这时,如果不希望在子对象上移动而导致容器不停发出事件,那么可以使用MouseEvent.ROLL_OVER和MouseEvent.ROLL_OUT。ActionScript3设计这对事件本身就是为了简化我们的代码编写,不必勉强自己再去使用MouseEvent.MOUSE_OUT和MouseEvent.MOUSE_OVER。




如flash所示,当你把鼠标放到第一个按钮上来的时候,会出现几个按钮,开始的按钮和后来出现的按钮都属于btn_mc,btn_mc包含一段按钮出现的动画,其中在第一帧和最后一帧都加了stop();看主场景第一帧的代码:

this.btn_mc.addEventListener(MouseEvent.ROLL_OVER,go);
this.btn_mc.addEventListener(MouseEvent.ROLL_OUT,back);
function go(evt:MouseEvent):void{
evt.target.gotoAndPlay(2);
}
function back(evt:MouseEvent):void{
  evt.target.gotoAndStop(1);
}

以上代码就能实现上述flash的效果,如果把上面的MouseEvent.ROLL_OVER换成MouseEvent.MOUSE_OVER,会发生什么事呢?那么当你鼠标离开最开始的按钮的时候,会产生一个MouseEvent.MOUSE_OUT事件,然后鼠标到下面按钮的时候,又会产生MouseEvent.MOUSE_OVER事件,此时,会报错。“在flash.display.SimpleButton上找不到属性gotoAndPlay,且没有默认值。很显然,此时go函数中的evt.target就变成了小按钮了。如果是MouseEvent.ROLL_OVER的话,go函数中的evt.target还是指的容器。用ROLL_OVER、ROLL_OUT来制作精美的flash二级导航菜单还是挺不错的。实现起来也比较简单
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics