Flashの埋め込まれたページでのページスクロールの制御
ActionScript, JavaScriptでの問題です.
ブラウザ上で,マウスホイールを操作したときに,
・カーソルがFlash上にあるときは,ブラウザのページをスクロールさせない (Flashではホイール操作を使用する).
・カーソルがFlash外にあるときは,ブラウザのページをスクロールさせる.
を実現するために,次のように実装していました.
Flex User Group「マウス ホイール時に,ブラウザのスクロールをさせたくない」
http://www.fxug.net/modules/xhnewbb/viewtopic.php?topic_id=885
Flashでブラウザの「ホイール→ページスクロール」をon/offしています.
ところが,カーソルの動きが速いと,FlashでMouseEvent.MOUSE_OUTが発火されない場合があります.
それでは困るので,ブラウザ(JavaScript)で制御をしようと,
onmouseover/onmouseoutを使って次のように書いてみました.
# 上記に追加した部分のみ
function getMyApp(appName) { // from Flex2 sample code
if (navigator.appName.indexOf (“Microsoft”) !=-1) {
return window[appName];
} else {
return document[appName];
}
}
getMyApp(“xxx”).onmouseover = function(){
_wheelEnabled = false;
}
getMyApp(“xxx”).onmouseout = function(){
_wheelEnabled = true;
}
結果,IE6では動きましたが,Firefox/Operaではonmouseover/onmouseoutイベントが効いていません.
探してみると,
「すべてのブラウザで試している訳ではないですが、…(中略)…wmodeをtransparentにしてしまうとSWFの下のonmouseoverイベントが効くことがわかりました。」
http://dyo.jp/blog/2007/03/
wmode=transparentで試してみたところ,Firefox/Operaでonmouseover/onmouseoutイベントが効きました!
# wmode=opaqueでもokでした.
ところが,wmode=opaque/transparentにすると,今度はFlashでホイールを感知できない.
http://www.feed-squirrel.com/index.cfm?evt=viewItem&ID=30560
どうどう巡りです…