3

div 内に flash オブジェクトがあり、スクロールするとコンテンツがズームされます。問題は、私のページもスクロールすることであり、この問題を解決する方法がわかりません。フラッシュをスクロールするときにページを静止させる必要があります。

これを追加してみました

 flashContainer.bind('mousewheel DOMMouseScroll', function(e) {
                var scrollTo = null;

                if (e.type === 'mousewheel') {
                    scrollTo = (e.originalEvent.wheelDelta * -1);
                } else if (e.type === 'DOMMouseScroll') {
                    scrollTo = 40 * e.originalEvent.detail;
                }

                if (scrollTo) {
                    e.preventDefault();
                    $(this).scrollTop(scrollTo + $(this).scrollTop());
                }
            });

しかし preventDefault により、フラッシュ オブジェクトはもうズームしません。

何か提案はありますか?

4

3 に答える 3

1

これはあなたのために働くかもしれません:

$("element").hover(function(){
    var scrollT = $(document).scrollTop();
    $(document).on("scroll", function(e){
        $(document).scrollTop(scrollT);
    });
}, function(){
    $(document).off("scroll");
});

http://jsfiddle.net/ZFsDY/3/

于 2013-06-26T13:09:06.433 に答える
0

別の試み:

$("element").bind( 'mousewheel DOMMouseScroll', function ( e ) {
    var d = e.wheelDelta || -e.detail;
    var s;
    if(d < 0) s = 1;
    else s = -1;
    this.scrollTop += s * 30;
    e.preventDefault();
});

http://jsfiddle.net/ZFsDY/5/

于 2013-06-26T14:14:25.407 に答える
0

数か月前にこの問題に遭遇しました (スクロールを管理するために使用していた古い方法は、最新のブラウザーでは機能しませんでした)。そのためのコードを公開することは許可されていませんが、ここで私たちがどのようにそれを行ったかについていくつかメモします.

reyaner の回答のように、イベント リスニングと preventDefault() を使用してブラウザの自動スクロールを無効にし、スクロール値を取得します (scrollTop() は使用しません)。値を取得したら、ExternalInterface を介して Flash に送信します。これを可能にするには、Flash オブジェクトに、Javascript から呼び出すことができる Flash メソッドである Callback を事前に追加する必要があります。

Flash にフォーカスがある場合にのみスクロールがロックされるように、Flash と JS の間にいくつかの相互作用を追加しました。

警告 : すべてのブラウザーで wheelDelta のスケールが同じであるとは限らず、ズーム速度が異なる場合があります。これを修正するために、デルタをそのまま使用する代わりに、イベントがディスパッチされるたびに常に固定ステップを使用することにしました。

于 2013-06-27T17:03:53.150 に答える