我正在使用fancybox 1.3.1。现在我将iFrame加载到Fancybox中工作正常。在iFrame中,用户从一步到另一步。在某个步骤,内容的高度会发生变化。如何更新iFrame的高度?
我尝试了jQuery postMessage:
<script type="text/javascript" src="fileadmin/templates/lib/jquery.ba-postmessage.min.js"></script>
<script type="text/javascript">
$("#fancylink").fancybox({
'type' : 'iframe',
'width' : 700,
'height' : 450,
'autoScale' : false
});
</script>
<script type="text/javascript">
// set inital height
var if_height = 450;
$(document).ready(function() {
if($.receiveMessage){
$.receiveMessage(function(e){
// Get the height from the passsed data.
var h = Number( e.data.replace( /.*if_height=(\d+)(?:&|$)/, '$1' ));
if ( !isNaN( h ) && h > 0 && h !== if_height ) {
// Height has changed, update the iframe.
// checking min and max height
h=(h<450)?450:h;
$("#fancybox-frame").height( if_height = h );
}
});
}
});
</script>
我得到两种高度样式溢出:隐藏;从这里可以看出:
<div id="fancybox-inner" style="top: 10px; left: 10px; width: 700px; height: 450px; overflow: hidden;">
<iframe id="fancybox-frame" scrolling="auto" frameborder="0" src="https://www.externaldomain.com#http://www.internaldomain.com/page" hspace="0" name="fancybox-frame1347984635401" style="height: 1180px;">
结果是有更多内容可用,但用户无法滚动。所以什么都不做比这更好。
我也尝试了
$('#element').fancybox({
'onComplete' : function(){
$.fancybox.resize();
}
});
但是没有任何反应(没有调整大小)。我认为这个调整大小只是在fancybox的第一次加载。但也是第一次没有任何事情发生。
我的问题有解决办法,还是只能使用固定尺寸?
解决方案:
所以我添加了以下代码,它似乎按预期工作:
$("#fancybox-inner").height( h );
$("#fancybox-wrap").height( h+20 );
$.fancybox.center();
我会稍微测试一下,但我认为这可行。如果fancybox高于当前页面会发生什么?页面会增加吗?
答案 0 :(得分:4)
您可以执行以下操作。
function updateMyFancyBox() {
$.fancybox.wrap.height($.fancybox.inner.height() + $('div#yourContentDiv').height());//increase fancybox height by adding your div height.
$.fancybox.update();//Fancybox will re-size according to new size, if it exceeds size limit, it will show scroll bar.
}