Safari で Event.MOUSE_LEAVE が使えません。
ということは、マウスがステージを外れたことを検知できません。
drag操作を必要とする時すこぶる都合が悪い。
target.addEventListener(MouseEvent.MOUSE_DOWN, onDown); function onDown (e:MouseEvent):void { target.removeEventListener(MouseEvent.MOUSE_DOWN, onDown); stage.addEventListener(Event.MOUSE_LEAVE, onLeave); stage.addEventListener(MouseEvent.MOUSE_UP, onUp); // start drag } function onLeave (e:Event):void { // leave: stop drag target.addEventListener(MouseEvent.MOUSE_DOWN, onDown); stage.removeEventListener(Event.MOUSE_LEAVE, onLeave); stage.removeEventListener(MouseEvent.MOUSE_UP, onUp); } function onUp (e:MouseEvent):void { // up: stop drag target.addEventListener(MouseEvent.MOUSE_DOWN, onDown); stage.removeEventListener(Event.MOUSE_LEAVE, onLeave); stage.removeEventListener(MouseEvent.MOUSE_UP, onUp); } |
こんな感じ。
Safariが MOUSE_LEAVE を教えてくれないんだなぁ、困った。
MOUSE_OUTも使ってみました。
target.addEventListener(MouseEvent.MOUSE_DOWN, onDown); function onDown (e:MouseEvent):void { target.removeEventListener(MouseEvent.MOUSE_DOWN, onDown); stage.addEventListener(Event.MOUSE_LEAVE, onLeave); stage.addEventListener(MouseEvent.MOUSE_UP, onUp); // stage.addEventListener(MouseEvent.MOUSE_OUT, onOut); } function onLeave (e:Event):void { // leave target.addEventListener(MouseEvent.MOUSE_DOWN, onDown); stage.removeEventListener(Event.MOUSE_LEAVE, onLeave); stage.removeEventListener(MouseEvent.MOUSE_UP, onUp); // stage.removeEventListener(MouseEvent.MOUSE_OUT, onOut); } function onUp (e:MouseEvent):void { // up target.addEventListener(MouseEvent.MOUSE_DOWN, onDown); stage.removeEventListener(Event.MOUSE_LEAVE, onLeave); stage.removeEventListener(MouseEvent.MOUSE_UP, onUp); // stage.removeEventListener(MouseEvent.MOUSE_OUT, onOut); } // OUT function onOut (e:MouseEvent):void { var px:Number = e.stageX; var py:Number = e.stageY; if (px <=0 || px >= stage.stageWidth || py <= 0 || py >= stage.stageHeight) { onUp(e); } } |
なんだかなぁ〜。
どうにかSafariでもマウスがステージを外れたのを検知できるようになったけど、こんなんでいいのかなぁ。
【環境】
OS X 10.7.2
Safari 5.1.1
Flash Player 11.1.102.55
update 2011-12-22
OS 10.6x + Safari 5.x でも発生。
OS 10.5x + Safari 5.x では発生しません。
OS依存とかひどいよApple。
OS 10.6xでは stageのMOUSE_OUT も取得できない模様。
stageと同じ大きさのMovieClipを置いてコチラにaddEventListenerさせて回避させました。