我试图根据存储在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组合可以在显示奇特的盒子之前实现这一点?谢谢!
答案 0 :(得分:12)
您也可以使用beforeShow
回调选项,但您可能需要取消所有转换(将nextSpeed
和prevSpeed
设置为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