花哨的盒子在beforeShow函数中使用iframe?

时间:2012-05-26 19:30:54

标签: jquery iframe fancybox fancybox-2

我试图根据存储在iframe正在加载的iframe内的标签中的信息动态设置我的Fancybox对象的某些值。问题是,我唯一能够从内容中获取CORRECT值(iv几乎可以尝试每个回调组合)都在afterShow方法上。这会导致宽度和高度的跳跃过渡,在显示后会重置。

$('.fancybox').fancybox({
            openEffect : 'elastic',
            closeEffect : 'elastic',
            autoSize:true,
            afterShow : function() {
                    var fancy = this;
                    var h = $('.fancybox-iframe').contents().find('html').height();
                    var w = $('.fancybox-iframe').contents().find('html').width();
                    fancy.width = w;
                    fancy.height = (h+50);
            }
        });

在AfterShow方法之外的任何东西都给我正确的结果,甚至在Show之前(这就是我想要的)。是否有任何回调/ jquery组合可以在显示奇特的盒子之前实现这一点?谢谢!

1 个答案:

答案 0 :(得分:12)

您也可以使用beforeShow回调选项,但您可能需要取消所有转换(将nextSpeedprevSpeed设置为0)。

转换速度似乎是使用afterShow回调创建跳跃效果或使用beforeShow回调来避免获取正确的值。

您可能还需要更新到fancybox v2.0.6。

此外,您还可以在不使用外部变量的情况下简化脚本:

$(document).ready(function() {
 $("a.fancybox").fancybox({
  openEffect : 'elastic',
  closeEffect : 'elastic',
  fitToView: false,
  nextSpeed: 0, //important
  prevSpeed: 0, //important
  beforeShow: function(){
  // added 50px to avoid scrollbars inside fancybox
   this.width = ($('.fancybox-iframe').contents().find('html').width())+50;
   this.height = ($('.fancybox-iframe').contents().find('html').height())+50;
  }
 }); // fancybox
}); // ready

请参阅DEMO here