26

有谁知道如何在运行时调整 jQuery Fancybox 的大小?

初始化fancybox时,我可以这样做:

$("tag").fancybox({ 'frameWidth': 500, 'frameHeight': 700 });

我正在用动态内容填充花式框,我希望它根据内容调整大小。

4

18 回答 18

43

如果你使用的是 1.3 版的 Fancybox,有一个 resize 方法:

$.fancybox.resize();

对于Fancybox的 2.x 版,同样的做法是:

$.fancybox.update()

这将根据里面内容的大小调整活动的花式框的大小。

于 2010-03-24T04:05:55.110 回答
11

Alan 的解决方案是不完整的,因为在修改大小后框不再居中在屏幕上(至少对于最新的 jquery 和 fancybox 版本)。

因此,完整的解决方案将是:

$("#fancy_outer").css({'width': '500px', 'height': '500px'});
$("tag").fancybox.scrollBox();
于 2010-01-12T21:10:45.550 回答
4

$("#fancybox-wrap").width(width); //或高度或其他

$.fancybox.center();

于 2010-05-11T09:09:49.287 回答
4

在谷歌中搜索了很长时间但没有找到任何东西后,我确实找到了解决这个错误的方法。

要将框调整为页面的宽度和高度并将其居中,请执行以下操作:

$("#click-to-open").click(function(){

    var url = "url-loader.php";
    $.fancybox({
        'autoScale'           : false,
        'href' : url,
        'padding'             : 0,
        'type' : 'iframe',
        'titleShow' : false,
        'transitionIn'        : 'elastic',
        'transitionOut'       : 'elastic',
        'onComplete' : function(){
            $('#fancybox-content').removeAttr('style').css({ 'height' : $(window).height()-100, 'margin' : '0 auto', 'width' : $(window).width()-150 });
            $('#fancybox-wrap').removeAttr('style').css({ 'height' : $(window).height()-100, 'margin' : '0 auto', 'width' : $(window).width()-150 }).show();
            $.fancybox.resize();
            $.fancybox.center();
        }
    });
});
于 2012-07-26T13:06:04.880 回答
4

嘿,经过将近两天的战斗,我设法改变了叠加高度。希望这会有所帮助:

$('#register-link a').fancybox({
    onComplete: function(){
        body_height = $('body').height();
        fancybox_content_height = $('#fancybox-content').height();
        fancybox_overlay_height = fancybox_content_height + 350;
        if(body_height < fancybox_overlay_height ) {
            $('#fancybox-overlay').css('height', fancybox_overlay_height+'px');
        }
    }
});

这段代码所做的是,它首先计算身体的高度,#fancybox-content 和#fancybox-overlay。然后检查body的高度是否小于overlay的高度,如果是,则将新计算的高度分配给overlay,否则采用默认body的高度

于 2011-03-23T06:28:26.970 回答
4

我只是想让你意识到这一点。

在寻找使用 javascript 调整高度的解决方案后,我和我的伙伴意识到了一些惊人的事情。

检查#fancybox-inner 的包含元素是否设置了PADDING 或MARGIN。

这是关键元素(#fancybox-inner margin/padding 定义的直接子元素。

子元素(#fancyfox-inner > div > .here)可以有填充,但不要忘记调整:

 $('#element').fancybox({
    'onComplete' : function(){
        $.fancybox.resize();
    }
}); 
于 2011-07-19T20:22:01.223 回答
3

如果 Fancybox 是 jQuery UI 的一部分,你会这样做:

$("tag").fancybox.option('frameWidth', 500);

但是由于它似乎没有提供这样的方法,因此您需要直接设置CSS:

$("#fancy_outer").css({'width': '500px', 'height': '500px'});
于 2009-06-15T07:55:18.640 回答
2
function overlay(){
   var outerH = $('#fancybox-outer').height();
   var bodyH  = $(window).height();
   var addH   = 300; //add some bottom margin

   if(outerH>bodyH){
    var newH = outerH + addH;
   }else{
    var newH = bodyH + addH;
   }

   $('#fancybox-overlay').height(newH+'px');

   $.fancybox.center();

}

并在需要时调用它...(例如uploadify onSelect 事件-> 长文件列表使fancybox 如此之大,我们再次计算高度)

... 'onSelect' : function(event,ID,fileObj){

overlay();

}, ...
于 2012-04-07T22:15:50.010 回答
1

我的解决方案是这样的(对于fancybox 1.3.4):

寻找

$.fancybox.resize = function() {
        if (overlay.is(':visible')) {
            overlay.css('height', $(document).height());
        }


        $.fancybox.center(true);
    };

并替换为

$.fancybox.resize = function() {
    if (overlay.is(':visible')) {
        overlay.css('height', $(document).height());
    }

    view = _get_viewport();
    var updated_width = view[0];
    if (updated_width > selectedOpts.width) { updated_width = selectedOpts.width; }

    $("#fancybox-wrap, #fancybox-content").css("width", updated_width);        

    $.fancybox.center(true);
};
于 2014-04-24T11:53:21.560 回答
1

$.fancybox.resize(); 对我不起作用,所以我将此代码放入加载的页面中,在 fancybox iframe 内:

$(document).ready(function(){
    parent.$("#fancybox-content").height($(document).height());
});

您也可以在回调中设置它:

$("#mydiv").toggle('fast', function(){
    parent.$("#fancybox-content").height($(document).height());
});
于 2012-03-17T00:00:43.937 回答
1

我也在努力调整fancybox的大小。解决方案是$.fancybox.reposition();

奇迹般有效!

于 2012-05-29T19:14:48.563 回答
1

这种方法对我有用。:)

$(".fancybox-wrap.fancybox-desktop.fancybox-type-iframe.fancybox-opened").css({"height": heightToAdjust});
$(".fancybox-inner").css({"height": heightToAdjust});
if ($.fancybox.isOpened) {
   if ($.fancybox.current) {
      $.fancybox.current.height = heightToAdjust;
   }
}
$.fancybox.reposition();
于 2016-04-04T09:56:56.273 回答
0

我刚刚在其 Google 群组https://groups.google.com/forum/#!topic/fancybox/fuUuBJyTrH8上向 Fancybox 发布了一个建议的补丁,其中添加了一个公共方法 $.fancybox.reshow()。这将重新计算花式框的高度和宽度。它适用于 window.onorientationchange 和 window.onresize,例如:

window.onresize = function() {
    $.fancybox.reshow();
}
于 2011-08-30T18:53:20.947 回答
0

就我而言,我使用 Fancybox 来显示一个非常简单的网页,其中只包含一张图片。此图像的大小可能会有所不同。我的问题是图像不包括style="height: NNpx; width: NNpx;". 否则,fancybox autoSize 可能会产生意想不到的结果(在他们的文档http://fancyapps.com/fancybox/中说明)。

tl; dr:为 autoSize 提供宽度和高度属性以正常工作。

于 2015-01-16T19:34:02.710 回答
0

感谢所有为 StackOverflow.com 做出贡献的人。你们多次成为我的救命稻草。现在,我终于可以贡献一些东西了。以下是我在运行时如何克服调整大小幻想框的方法:

我用传递给它的维度 PHP 变量分配了 href 元素的特定属性。然后在点击事件中调用并设置属性,其中嵌入了fancybox控制功能和参数......

<a href="ASSET_ABSOLUTE PATH" class="asset" data-fancybox-type="iframe" assetW="$assetW" 
assetH="$assetH">LINK</a>

$(".asset").click(function(){

    var assetW = $(this).attr('assetW');

    //to display inter-activities..
    $(".asset").fancybox({

    width       : assetW,
    fitToView   : false,
    autoSize    : true,
    closeClick  : false,
    openEffect  : 'none',
    closeEffect : 'none',
       'onComplete' : function(){
         $.fancybox.resize();

      }
  });
});
于 2013-10-03T14:02:09.933 回答
0

这是我的解决方案:

$("#linkpopup").fancybox({
    'titlePosition'     : 'inside',
    'transitionIn'      : 'none',
    'transitionOut'     : 'elastic',
    'onComplete' : function(){
        $.fancybox.resize();
    }
});
于 2012-04-08T00:42:06.753 回答
0

Fancybox 3(最新版本)上

parent.jQuery.fancybox.getInstance().update();

参考: http: //fancyapps.com/fancybox/3/docs/#iframe

于 2017-10-30T13:24:56.337 回答
-1

Use:

parent.jQuery.fancybox.update();
于 2017-10-17T12:25:42.807 回答