wmodeを指定するとMOUSE_LEAVEが効かない場合がある?

2009年11月12日
ステージ内でマウスを押した(MOUSE_DOWN)ままFlashの領域外までドラッグした時、
そのままではマウスを離したイベント(MOUSE_UP)を検出できないんだけど
マウスがFlash領域から出た時を検出できるEvent.MOUSE_LEAVEを使うと
マウスダウン→領域外までドラッグ→マウスアップのタイミングでもイベントが取れるので
これを利用してボタンの表示を元に戻したりドラッグ処理を停止したりできます。
ただswfをhtmlに埋め込む時にwmodeを指定していると
環境によってはMOUSE_LEAVEイベントが発生しない事があるっぽい。。。

ので、検証用にサンプルを用意してちょっと実験してみました。
全部WindowsXP、FlashPlayer10でテストしてます。ブラウザは4つだけ。

真ん中の黒いボックスがボタンになってて、
マウスを押すとオレンジに、離すと青に変化するようになってます。
「ボタン上でマウスダウン→Flash領域外までドラッグ→マウスを離す」ってやって
オレンジ→青と変われば成功ね。

wmode指定なし


IE8・Firefox3.0・Opera10・Safari4で全部問題なし。

wmode=transparent


Firefox3.0・Opera10・Safari4では領域外ドラッグでMOUSE_LEAVEが効かない。
挙動も色々おかしい気がする。
IE8では領域外(ブラウザ内)でマウスを離すと何故かstageのMOUSE_UPが発生して
その後領域外でマウスを動かすとMOUSE_LEAVEが発生した。
IE8でドラッグしてブラウザの外で離すとすぐにMOUSE_LEAVEが発生。

wmode=opaque


transparentと同じ結果。


結局

MOUSE_LEAVEを判定したい時はwmodeは指定すると駄目って事なのかな。
見にくいけどサンプルのソースはこれです

トラックバック(0)

トラックバックURL: http://www.morocoshi.net/mt/mt-tb.cgi/24

コメントする