• ベストアンサー

【FLASH】コンボボックスがあるとIEでスクロールできない。バグ?

FLASH8(Win-XP)使用者です。 仕事でFLASHを作っています。 FLASHの中にコンボボックス(UI)が存在しているだけでブラウザ上でマウスホイールでのスクロールができなくなってしまい困っています。(スペースキーでのスクロールも不可) 余裕があれば試していただきたいのですが、 (1)FLASHに単純にコンボボックスを貼り付ける。 (2)SWFをHTMLに貼り付ける。 (3)IEで閲覧 (4)FLASH画像をクリック(アクティブ化) →マウスホイールでブラウザをスクロールできない! といった感じです。 ちなみにNetscape7.1なら問題ありません。 環境は、 IE6 FLASHプレイヤー8 パブリッシュは8で です。 解決策をご存知の方、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

バグではなく、Flash Player やコンポーネントの仕様と思われます。 スペースキーはさておきマウスホイールでのスクロールができなくなる原因は、ホイールが動いた時に指定の処理を呼び出せるイベントハンドラ onMouseWheel です。 ですから、UI コンポーネントを使わなくても、onMouseWheel を利用する作品では同様の現象が起こります。 自分では onMouseWheel を使っていないのにコンポーネントが存在するだけでスクロールできなくなるというのは、一部のコンポーネントはマウスホイールに対応するために内部で onMouseWheel を利用しているからです。 HTML ページ内で、マウスホイールの動作を監視する onMouseWheel を利用している Flash ムービーにフォーカスがある時にマウスホイールを動かしても、ページ全体はスクロールしません。 これは、Flash Player がマウスホイールの動作を監視し、本来の動作であるページのスクロール処理を onMouseWheel で定義された処理に置き換えるためです。 onMouseWheel というイベントハンドラが作られた意味を考えると、これは当然の仕様です。 Flash 内でマウスホイールの独自の動作を実現しようという目的なのに、Flash ムービーにフォーカスがあるにも関わらずページ全体がスクロールしてしまうようでは意味がありません。 Flash Player がキーボードやマウスの操作を監視して独自の処理を行うことができるのは、フォーカスが自分にある時だけです。 従って、他の部分をクリックしたなどで Flash ムービーからフォーカスが失われると、onMouseWheel を定義していてもページ全体がスクロールするようになります。 また、Flash ムービーにフォーカスがある場合でも、onMouseWheel を無効にするとマウスホイールでのページのスクロールが可能になります。 簡単なサンプルを作ってみると分かります。 例えば、ステージにダイナミックテキストのテキストフィールド” status_disp ”、ボタンシンボルのインスタンス” on_btn ”と” off_btn ”を配置し、次のようなスクリプトをメインのタイムラインに設定してみてください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  //テキストフィールドを複数行対応にする  status_disp.multiline = true;  /*マウスホイールが動いた時の処理*/  wheel_obj = new Object();  wheel_obj.onMouseWheel = function( delta )  {   //ホイールカウンタを出力   status_disp.text += "\n" + delta;  };  /*ONボタンでマウスホイールの監視をスタート*/  on_btn.onRelease = function()  {   status_disp.text = "ホイール監視スタート";   Mouse.addListener( wheel_obj );  };  /*OFFボタンでマウスホイールの監視をやめる*/  off_btn.onRelease = function()  {   status_disp.text = "ホイール監視ストップ";   Mouse.removeListener( wheel_obj );  }; 「パブリッシュ」で HTML ファイルを作成し、この HTML に他の文章や画像などを追加してスクロールが必要な長さのページにし、ブラウザで確認してみてください。 ページを開いた直後は Flash Player にフォーカスがありませんので、スペースキー・マウスホイールのどちらでもページ全体をスクロールできます。 Flash ムービーをクリックしてフォーカスを与えても、最初は onMouseWheel を利用していないため、マウスホイールを動かすとページがスクロールします。 Flash ムービーにフォーカスを与えた状態でボタン” on_btn ”をクリックすると、onMouseWheel が有効になります。 この状態でマウスホイールを動かすと、onMouseWheel で定義された処理に従い、テキストフィールドにホイールのカウンタが出力されます。 この時はマウスホイールを動かしてもページがスクロールしません。 onMouseWheel が有効の時にボタン” off_btn ”をクリックすると、onMouseWheel の処理が呼び出されなくなります。 マウスホイールも本来の動作に戻りますから、Flash ムービーにフォーカスがあってもページがスクロールするようになります。 Flash ムービー以外のところをクリックした場合は、Flash Player はマウスホイールの動作を制御する権限を失います。 従って、onMouseWheel が有効か無効かに関係なく、マウスホイールでページをスクロールできるようになります。 Windows XP の IE 6.0 ・ Flash Player 9 と Netscape 7.1 ・ Flash Player 8 の両方で同じ HTML ファイルを見てみましたが、どちらも同様の動作でした。 ------------------------------------------------------------------ 一部の UI コンポーネントの内部では、スクロールバーなどをマウスホイールで操作できるようにするために onMouseWheel を利用しています。 (ちなみに、ComboBox コンポーネントのドロップダウンリストに付くスクロールバーは、マウスホイールで動かすことができます) 更に、UI コンポーネントを利用するとフォーカスを独自に管理する FocusManager というクラスが組み込まれたムービークリップが自動的に挿入され、Flash Player 本来のキー操作やタブ順・フォーカス処理などを上書きしてしまいます。 他にも、コンポーネントとともに裏方として働く様々なクラスがいくつかあるようです。 つまり、コンポーネントがあるとマウスホイールでページのスクロールができなくなる理由は、コンポーネントが onMouseWheel を利用しているためと思われます。 そして、onMouseWheel を利用している時にマウスホイールでページをスクロールできないのは Flash Player の仕様です。 フォーカスや一部のキー入力の反応が変わってしまうのは、おそらく FocusManager やその他の裏方クラスの仕業だと思います。 コンポーネントで利用している onMouseWheel を外すのは難しいですし、下手にいじるとコンポーネントの動作にも支障をきたしかねません。 また、JavaScript で強制的に Flash Player からフォーカスを外すとしても、JavaScript が無効になっている環境ではそもそも JavaScript が機能しません。 確実にマウスホイールによるページのスクロールを実現したいのなら、onMouseWheel を使わないコンボボックスを自作するしかないと思います。 コンポーネントの UIScrollBar を利用すれば同じことになってしまいますので、スクロールが必要なコンボボックスならスクロールバーも自作ということになります。 なお、FocusManager は”ライブラリに”UI コンポーネントのシンボルが1つでもある限り有効です。 ステージにコンポーネントのインスタンスがなくても、ライブラリにシンボルがあると組み込まれてしまいます。 コンポーネント内部で使われる数々のクラスも同様に、インスタンスがなくても自動的に定義されます。 (インスタンスがないのに、勝手に onMouseWheel が定義されてホイールでページをスクロールできなくなる理由も、ここにあるものと思われます) コンポーネントが不要になった時はシンボルごと削除してください。

ikataro
質問者

お礼

なるほど!! コンボボックスの中身が多い場合コンボボックスにスクロールバーがでてきてホイールでスクロールできますね。 これが原因だったとは・・ 自作に挑戦させていただきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#35109
noname#35109
回答No.1

同じ現象について書かれているのかどうかはよくわかりませんが, 確かに UI 系のコンポーネントのうちのいくつかを使用した場合, Flash にフォーカスを当てた状態でマウスホイールの回転させても, ブラウザに表示されているページ全体がスクロールしませんね。 (スペースキーでのスクロールはコンポーネントを使わなくても不可ですが。) また, 一度,コンポーネントをステージ上に配置して, ステージ上から消したとしても, マウスホイールの回転で,ページ全体のスクロールはできないままですね。 しかし, Flash からフォーカスをはずすと, つまり Flash 以外の部分を一度クリックすると, フォーカスはページ側に戻るので, マウスホイールの回転で,ページ全体のスクロールは可能になりますよ。 この点は同じ現象なのでしょうか? この点について同じ現象なのかどうかがわかりませんが。 動作環境: Windows XP,IE6.0,Flash Player 9 です。 こうなる点についての原因はよくわかりませんが, この辺が関係しているのかもしれません↓。 (関係していないかもしれません。) コンポーネントに続けてButtonを連続クリックするとイベントが発生しない http://www.fumiononaka.com/TechNotes/Flash/FN0510008.html > 原因 > コンポーネントインスタンスに対するフォーカスを管理する > FocusManagerクラスに問題があるようです。 対処法ですが, 私の環境では上にも書きました通り, Flash からフォーカスをはずすと, マウスホイールの回転で,ページ全体のスクロールは可能になります。 ですから, これを,JavaScript で Flash からフォーカスを自動的にはずすようにすれば一応は対処できました。 まず,簡単な例では, ステージ上にボタンを作成して, 次のように書き,パブリッシュしてそのボタンをクリックすれば, マウスホイールの回転で,ページ全体のスクロールは可能になります。 --------------------------------------- on (release) { // 表示しているウィンドウから一旦フォーカスをはずして getURL("javascript:window.blur();"); // 再び表示しているウィンドウにフォーカスを当てる getURL("javascript:window.focus();"); } --------------------------------------- あまり格好の良い方法ではありませんね。 JavaScript 専門の方ならもう少し良い方法を思い付くかもしれませんが, 私の能力ではこれしか考え付きませんでした(これしかうまく行きませんでした)。 実際は, 上に様にボタンをクリックするのではなく, マウスホイールの回転やスペースキーのプレスで, 上記のスクリプトを実行させれば良いわけです。 次のスクリプトは, _root の フレーム1 などに書くスクリプトです(コピペ可能)。 //////////////////////////////////////////////////// // --- ★フォーカス移動に関して ------ // JavaScript でフォーカスはずすユーザ定義関数の定義 function focusMove() { // 表示しているウィンドウから一旦フォーカスをはずして getURL("javascript:window.blur();"); // 再び表示しているウィンドウにフォーカスを当てる getURL("javascript:window.focus();"); } // // --- ★マウスに関して ------------- // マウスリスナーオブジェクトの作成 var mouseListener = new Object(); // // マウスホイールが回転したときの動作定義 mouseListener.onMouseWheel = function() { // ユーザ定義 focusMove の実行 focusMove(); }; // // マウスリスナーオブジェクトをマウスクラスのリスナーに登録 Mouse.addListener(mouseListener); // //--- ★スペースキーに関して --------- // キーリスナーオブジェクトの作成 var keyListener = new Object(); // // キーが押されたときの動作定義 keyListener.onKeyDown = function() { // スペースキーが押されたら if (Key.isDown(Key.SPACE)) { // ユーザ定義 focusMove の実行 focusMove(); } }; // // キーリスナーオブジェクトをキークラスのリスナーに登録 Key.addListener(keyListener); //////////////////////////////////////////////////// マウスホイールの回転も,スペースキーのプレスも, 1回目の実行はフォーカスの移動に使用されるため, 2回目以降の実行でスクロールが有効になります。 マウスホイールの場合は,1回目とか2回目とかを普通はあまり意識しないので, 普通に使えば普通に近い感じでスクロール可能だと思いますが, スペースキーの場合は,確実に1回目のプレスではスクロールしないのがわかってしまうと思います。 あまり良いアイデアとも思えませんが, 1つの対処法になりますでしょうか。  

ikataro
質問者

お礼

なるほど! JavaScriptが大活躍ですね。 とりあえずバグってことである意味あきらめがつきました。 コンボボックスは他にもいくつか問題があるようなのでいっそ自分で自作してみようかと思います。 丁寧な解説どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • IE ブラウザをスクロールですると画面がぶれたり崩れる

    Firefox・Netscape では問題なく普通に表示されるのですが、 IEでページ(HTMLに画像やswfがのっかっているごくごく普通のページ) を表示して、ブラウザのスクロールやマウスについてるスクロールなどで ブラウザをスクロールすると、 画像がぶれたりFlash のレイアウトがくずれたりします。 (画像がFlash の上に重なったり…) いろいろ試してみましたが、 (Flashの比率など関係ありますか??650×472です。。。) なにが原因なのかさっぱりわからず、 一週間以上格闘中です、、、 どうか解消方法を教えてください。 お願い致します。

  • グループボックス内のコンボボックスについて

    お世話になります。 WindowsXP / VC2005 / VC++ MFC / ダイヤログベースにて開発を行っています。 グループボックス内にコンボボックスを2つ配置しています。 コンボボックスにカーソルを合わせて、マウスホイールをスクロールした際、 ボックスの中身がスクロールしないのですが、スクロールする方法をご存知でしたら教えていただけないでしょうか? グループボックス外にコンボボックスを配置した場合では、ボックスの中身がスクロールされており、 再度グループボックス内にてプロパティを変更したりと試してみたのですが、思うように行きません。 よろしくお願いいたします。

  • ActiveXコントロールのコンボボックスについて

    あるシートに、ActiveXコントロールのコンボボックスを1つ作成し、 別なシートからコンボボックスの中身を取り出すような形にしました。 コンボボックスの中身は  [****]AAAA   ※*は半角数字、AAAは全角で漢字やひらがな交じり。*は4文字。Aは最大16文字 というような形になっています。 コンボボックスの中身は、場合によって違い、最小3個、最大17個になります。 質問1:コンボボックス内の表示がAの部分の4文字までで切れてしまいます。      これが表示の限界なのでしょうか?      全て表示させることはできないのでしょうか? 質問2:コンボボックスの中身が多くなると、垂直スクロールバーが表示されますが、      これがマウスのホイールスクロールと連動しません。      連動させることは出来ないのでしょうか?

  • Flash マウスホイールの制御

    FlashのSWFファイルを組み込んだHTMLをWEB上で公開しようとしているのですが、その際のマウスホイールの動作について質問があります。 現在、MCをスクロールさせるためにコンポーネントのScrollPaneにMCを追加して表示させています。 こうした場合、Flashにフォーカスが当たっている時にマウスホイールを行うとMCだけでなくブラウザのスクロールまで反応してしまいます。 いろいろググってみるとJavaScriptと連携して制御する方法が一般的なように見受けられたのですが、本来Flashにフォーカスが当たっていないとScrollPane等は反応しないはずという記述も見受けられました。 こうしたときにはどう制御するのが一番的確な方法なのでしょうか? ご存知でしたらご指摘の程をよろしくお願いします。

    • ベストアンサー
    • Flash
  • WinXPのIEで、フラッシュ(アクションスクリプト)が見えない

    ニュースを書き込むページ(PHP)があり その原稿内容が、別のページから、フラッシュのアクションスクリプトで、テキストボックスにスクロールして見えるようになっているのですが・・・ WinXP(ホームエディション・プロフェッショナル両方) のIEで、見えません。 なお、別のブラウザ(Opera7とNetscape7.1)では見えますし、 XP以前のバージョンのOSからなら、IE(おそらくバージョンは5か6・・・)でも見えるのです。 なお、PHP・フラッシュともに頼んで作ってもらったもので、私が組んだわけではないので・・・ HTMLのパスを書き換える程度しかいじれません(--;) 何が原因なのでしょうか? あともうひとつ、WinXPに付属しているIEはあくまでも 「Internet Explorar」で、バージョン5とか6とかではないのでしょうか。 バージョン情報を見ても書いていないので・・・ ともかく早く見えるようにしたいので よろしくお願いします。

  • 【FLASH】IE6で見る場合、F5では画像更新できない。

    FLASH MX2004(Win-XP)使用者です。 ホームページ作成中にFLASH画像ファイルをあたらしいのに入れ替えて更新ボタンを押してもFLASHだけ更新されません。これはどうにもならないことなのでしょうか? 以下、状況です。 *自分のPC内でプレビューする場合です。 *Netscape7は更新できるがIE6は更新できない。 *IE6を再起動すれば更新される。 *CTRL+F5 では不可 ブラウザを閉じることなく更新できないものでしょうか? よろしくお願いいたします。

  • コンボボックスのドロップダウンリストの設定

    Excelのコントロールツールボックスからコンボボックスを作成したのですが、マウスのホイールをスクロールするとドロップダウンリストがコンボボックスの頭から離れてしまいます。 フォームツールバーから作成すれば離れないのですが、VBAでリンクを設定する関係でコントロールツールボックスから作成したいのです。 離れないように設定するにはどうしたらいいのでしょうか。 教えてください。宜しくお願いいたします。

  • CSSでコンボボックスのスクロールバーを変更

    現在、HTML+jQueryでタブレット向けのWebサイトを作成しています。 コンボボックスがあるのですが、スクロールバーが細くて手では選択しにくい為、 CSSでスクロールバーを太く変更できないかと考えています。 色々と検索しているのですが、良いサンプルなどが見当たりません。 何か参考になるサンプルなどがあれば教えていただきたいと思っています。 どうぞよろしくお願いいたします。

    • 締切済み
    • CSS
  • flash5でのスクロールバー表示

    フラッシュを使ってのHPを作ろうとしている初心者です。 マクロメディアのFlash5を使用しています。 http://flash.webkun.org/14/index.html​ ↑こんな感じで、画面の一部枠内にだけスクロールバーをつけて、 更新履歴のようなものを作りたいんですが、ソフトが古いので、 UIコーポネントのようなものがありません。 どうすれば作れますか?教えてください。よろしくお願いします。

  • 2つのコンボボックスを連動させたいのですが

    はじめまして。 Flashを始めて間もない初心者です。 2つのコンボボックスA、BがありAで選択された項目をBにも反映させたいのですが、どうスクリプトを記述したらいいのか分かりません。 初心者でも分かるようにどなたかご教授していただけないでしょうか? Flash8 professionalを使用しています。 どうぞ宜しくお願いいたします。