[]分享:避免鼠标快速移动,mouseout和mouseover触发顺序不一致的问题!

package
{
import laya.display.Sprite;
import laya.events.Event;
import laya.utils.Mouse;
/*
2或多个显示对象
鼠标移到显示对象上,呈现手型光标,移出呈现箭头,当鼠标快速在2个显示对象之间切换,会出现鼠标位于显示对象之上,但是依然是箭头状态
这个是由于mouseout和mouseover触发的先后顺序不一致导致的,为了避免这个问题,可以参考以下方式
*/
public class MouseOver_mouseOut
{
private var arr:Array;//用于存储处于over状态的显示对象
public function MouseOver_mouseOut()
{
Laya.init(600,400);
Laya.stage.bgColor='#EEFFCC';

arr=;
var sp1:Sprite=new Sprite();
sp1.autoSize=true;
sp1.name='sp1';
sp1.graphics.drawRect(0,0,100,100,"#FF0000");

var sp2:Sprite=new Sprite();
sp2.autoSize=true;
sp2.name='sp2';
sp2.graphics.drawRect(0,0,100,100,"#0000FF");
sp2.x=110;

Laya.stage.addChild(sp1);
Laya.stage.addChild(sp2);
onAddEvent(sp1);
onAddEvent(sp2);

}

private function onAddEvent(target:Sprite):void
{
target.on(Event.MOUSE_OVER,this,onMouse);
target.on(Event.MOUSE_OUT,this,onMouse);

}

private function onMouse(e:Event):void
{
//存储over状态的显示对象的name
if(e.type==Event.MOUSE_OVER)
{
arr.push(e.target.name);
}
//遍历arr处于over状态的显示对象,如果该显示对象已经触发了out事件,则将其从数组移除
else
{
for(var i:int=0;i<arr.length;i++)
{
if(arr[i]==e.target.name)
{
arr.splice(0,1);
}
}
}
//为处于over状态的显示对象设置手型光标
if(arr.length>0)
{
Mouse.cursor='pointer';
}
//为处于out状态的显示对象设置箭头显示
else
{
Mouse.cursor='auto';
}
}
}
}[/i]
已邀请:

Monica - 知识达人

赞同来自:

赞~\(≧▽≦)/~ 谢谢分享

要回复问题请先

商务合作
商务合作