0

これは私にとって大きな難問です。完全に説明します。

私は通常、このようなfancyappsfancyboxプラグインを起動するだけです...

$("a.gallery-thumb").fancybox({

    afterLoad   : function() {

        /* shtuff */

    }

});


a.gallery-thumbしかし、がクリックされたときに、私はユニークな変数を渡す必要があります。このユニークな変数はこれを使用して生成されます...

FB.Canvas.getPageInfo(function(info) {

    var scrollPosition = info.scrollTop;

};

このscrollPositionユニークな変数は、mya.gallery-thumbがクリックされたときの現在のスクロール位置です。


したがって、scrollPosition変数を以下のfancybox関数に渡す必要があります。

$("a.gallery-thumb").fancybox({

    afterLoad   : function() {

        $('.fancybox-wrap').css('top', '+=' + scrollPosition + 'px');   

    }

});


今、あなたはおそらく私がこれをしない理由を考えています...

$("a.gallery-thumb").fancybox({

    afterLoad   : function() {

        FB.Canvas.getPageInfo(function(info) {

            var scrollPosition = info.scrollTop;

            $('.fancybox-wrap').css('top', '+=' + scrollPosition + 'px');   

        };            

    }

    afterShow    : function() { },
    onUpdate     : function() { }

});


OK-これは正常に機能しますが、やなどscrollPositionの他のfancyboxコールバックに変数が必要です。しかし、関数を繰り返すことができるのは確かです...完全ではありませんが、ギャラリーの最初のクリックが行われたときから生成された元の値が必要です。afterShowonUpdateFB.Canvas.getPageInfo

だから、おそらく私はこのようなことをしなければなりませんが、それを機能させることができないようです、以下のスクリプトを機能させる方法についてのアイデアはありますか?

$("a.gallery-thumb").on('click', function (){

    event.preventDefault(); /* I'm trying to stop the image opening by default before my fancybox function runs */

    FB.Canvas.getPageInfo(function(info) {

        var scrollPosition = info.scrollTop;

        $(this).attr('rel','fancybox-thumb').fancybox({

            onUpdate   : function() {

                $('.fancybox-wrap').css('top', '+=' + scrollPosition + 'px');

            },

            afterLoad   : function() {

                $('.fancybox-wrap').css('top', '+=' + scrollPosition + 'px');

            },

            afterShow    : function() {

                $('.fancybox-wrap').css('top', '+=' + scrollPosition + 'px');

            },

            onUpdate     : function() {

                $('.fancybox-wrap').css('top', '+=' + scrollPosition + 'px');

            }

        });

    });

});

fancybox関数が起動しないという私の問題をエミュレートするjsfiddleを参照してください...

[http://jsfiddle.net/svsdx/1631/][1]
4

1 に答える 1

1

関数全体のスコープ内にあるように、変数宣言をレベルを上げてみませんか? お気に入り:

var scrollPosition = 0;
$("a.gallery-thumb").on('click', function (event){

    event.preventDefault(); /* I'm trying to stop the image opening by default before my fancybox function runs */
    FB.Canvas.getPageInfo(function(info) {

        scrollPosition = info.scrollTop;
    });
    return false;
    }).each(function(){

        $(this).attr('rel','fancybox-thumb').fancybox({             
            onUpdate   : function() {   
                $('.fancybox-wrap').css('top', '+=' + scrollPosition + 'px');           
            },                          
            afterLoad   : function() {              
                $('.fancybox-wrap').css('top', '+=' + scrollPosition + 'px');            
        },
            afterShow    : function() {
                $('.fancybox-wrap').css('top', '+=' + scrollPosition + 'px');
            },
            onUpdate     : function() {
                $('.fancybox-wrap').css('top', '+=' + scrollPosition + 'px');
            }
        });
});
于 2012-12-04T18:44:41.950 に答える