0

Flash を担当している同僚から、ドキュメント スクロールのデフォルト アクションをブロックするように頼まれました。

そして、彼を助けるために次のコードを追加します。

<script type="text/javascript">
(function (document) {
    var cancelscroll = function (e){
        e.preventDefault();
    };

    if ('onmousewheel' in document) {
        document.getElementById('container').onmousewheel = cancelscroll;
    } else {
       document.getElementById('container').addEventListener('DOMMouseScroll', cancelscroll, false);
    }
})(document);
</script>

IE9 と Firefox では問題なく動作しますが、Chrome では Flash スクロール イベントもブロックします。

スニペットはJavaScriptイベントのみをブロックする必要があるのに、Flashイベントもブロックするのはおかしいと思います。

私の同僚は、このスニペットでスクロール イベントを登録すると言いました。

stage.addEventListener(MouseEvent.MOUSE_WHEEL, mask_wheel);

彼は他のタスクを実行せずに、コールバックでデルタ値を取得するだけです。

私は Flash に詳しくなく、同僚は JavaScript に詳しくありません...

誰もがこの問題を抱えていますか?修正方法は?ありがとう。

4

1 に答える 1

1

3 日間のブレインストーミングの後、最終的に解決策を見つけました (この問題は私にとって最も重要でした)。Chrome ブラウザーでこの「バグ」を処理するのに役立つ小さなライブラリを作成しました: Github リポジトリ

これはほとんど MouseWheelTrap と同じで、.init() 関数を呼び出す必要があります。この関数には、flashObject の ID または名前という 1 つの追加パラメーターが必要です。詳細については、リポジトリの README を参照してください。

だからここに私の解決策があります:ブラウザでスクロールイベントをリッスンし、それが発生し、クロムブラウザを使用している場合、ユーザースクロールを模倣するフラッシュの内部関数を呼び出します(イベントをステージに手動でディスパッチします) イベントを呼び出す前にJS スクリプトの .preventDefault() 関数。別のブラウザーを使用している場合は、event.preventDefault() (IE の場合は returnValue = false) を呼び出すだけで、フラッシュでのイベントの二重遅延を防ぐことができます。

乾杯!

于 2013-07-24T11:29:13.283 に答える