0

这对我来说是一个巨大的难题。我会详细解释。

我通常只是像这样触发fancyapps fancybox插件......

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

    afterLoad   : function() {

        /* shtuff */

    }

});


但是我需要在a.gallery-thumb单击时传递一个独特的变量。这个独特的变量是使用这个生成的......

FB.Canvas.getPageInfo(function(info) {

    var scrollPosition = info.scrollTop;

};

这个scrollPosition唯一的变量是单击 my 时的当前滚动位置a.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() { }

});


好的 - 这工作正常,但我需要scrollPosition其他花式回调中的变量,比如afterShowand onUpdate。但可以肯定的是,我可以重复FB.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');

            }

        });

    });

});

请参阅此处的 js fiddle 模拟我的 fancybox 函数未触发的问题...

[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 回答