Flashコンテンツ(AS3)のステージ内で
マウスを押した(MouseEvent.MOUSE_DOWN)ままFlashの領域外までドラッグした時、
そのままではマウスを離したイベント(MouseEvent.MOUSE_UP)を検出できないんだけど
マウスがFlash領域から出た時を検出できるEvent.MOUSE_LEAVEを使うと
マウスダウン→領域外までドラッグ→マウスアップのタイミングでもイベントが取れるので
これを利用してボタンの表示を元に戻したりドラッグ処理を停止したりできます。
ただ、swfをhtmlに埋め込む時にwmodeを指定していると
環境によってはEvent.MOUSE_LEAVEイベントが発生しない事があるっぽい。。。
マウスを押した(MouseEvent.MOUSE_DOWN)ままFlashの領域外までドラッグした時、
そのままではマウスを離したイベント(MouseEvent.MOUSE_UP)を検出できないんだけど
マウスがFlash領域から出た時を検出できるEvent.MOUSE_LEAVEを使うと
マウスダウン→領域外までドラッグ→マウスアップのタイミングでもイベントが取れるので
これを利用してボタンの表示を元に戻したりドラッグ処理を停止したりできます。
ただ、swfをhtmlに埋め込む時にwmodeを指定していると
環境によってはEvent.MOUSE_LEAVEイベントが発生しない事があるっぽい。。。
そこで、検証用にサンプルを用意してちょっと実験してみました。
全てWindowsXP、FlashPlayer10でテストしてます。
真ん中の黒いボックスがボタンになっていて、
マウスを押すとオレンジに、離すと青に変化するようになってます。
「ボタン上でマウスダウン→Flash領域外までドラッグ→マウスを離す」とやって
オレンジ→青と変われば成功ね。
wmode指定なし
IE8・Firefox3.0・Opera10・Safari4・Chrome5で全て問題なし。
wmode=transparent
- Chrome5
問題なし
- Firefox3.0・Opera10・Safari4
Flash領域外ドラッグでEvent.MOUSE_LEAVEが発生しない。
- IE8
Flash領域外(ブラウザ内)でマウスを離すとstageのMouseEvent.MOUSE_UPが発生し、
その後マウスを動かすとEvent.MOUSE_LEAVEが発生した。
ドラッグしてブラウザの外で離すとすぐにEvent.MOUSE_LEAVEが発生。
wmode=opaque
transparentと同じ結果。
結局
Event.MOUSE_LEAVEを判定したい時はwmodeは指定すると駄目って事なのかな。見にくいけどサンプルのソースはこれです





コメントする