Colorbox中加载的AJAX内容包含一些JavaScript,可以调整内容中的内容。 Colorbox在所有AJAX发生之前根据大小确定其大小。如何在加载内容后重新调整Colorbox的大小?
这是一个链接,有人说你可以在加载后再次调用colorbox(),但我无法弄清楚如何做到这一点:
http://groups.google.com/group/colorbox/browse_thread/thread/535d21c69e9006b0
答案 0 :(得分:42)
动态调整你想说的颜色框。
colorbox.resize({width:"300px" , height:"300px"})
如果要调整加载Iframe的颜色框的大小,可以在目标文档的头部添加类似的内容。
$(document).ready(function(){
var x = $('mydiv').width();
var y = $('mydiv').height();
parent.$.colorbox.resize({width:x, height:y});
});
答案 1 :(得分:29)
在Colorbox 1.3中,您现在可以调用resize函数:
$('.item').colorbox.resize();
答案 2 :(得分:20)
当您调用颜色框时,只需向其添加onComplete
函数,例如
$('.mycolorboxes').colorbox({
onComplete : function() {
$(this).colorbox.resize();
}
});
因此,每次在彩色框中加载内容时,它都会启动其调整大小功能。
答案 3 :(得分:5)
我需要使用 setTimeout 方法为我调整大小。
我做ajax调用来获取图片,等待2秒并为此图片设置colorbox。
完成后,我用图片大小调整颜色框的大小。
没有超时它对我不起作用,因为图片没有完全加载,并且 width = 0,height = 0 作为图片的大小。
$.get('/component/picture/getPicture.do?pictureId=' + id,
function(data) { //callback function
$('#pictureColorbox').html(data); //set picture inside div on this page
setTimeout(function(){ // set timeout 2 sec
//create colorbox for inline content "#pictureColorbox" and call showPicture on complete
$.colorbox({href:"#pictureColorbox", inline:true, title:'', initialWidth:900, initialHeight:600, scrolling:false, onComplete: function(){showPicture(id);}});
}, 2000);
});
function showPicture(id) {
var x = $('#' + id + " #picture").width();
var y = $('#' + id + " #picture").height();
$.colorbox.resize({innerWidth:x, innerHeight:y});
}
答案 4 :(得分:3)
resize实际上需要一个jQuery对象并使用它来进行大小调整。相反,您可以像这样重新加载颜色框:
$(window).resize(function(){
$.fn.colorbox.load();
});
答案 5 :(得分:3)
只需将此代码放在iframe
:
$(document).ready(function() {
parent.$.fn.colorbox.resize({
innerWidth: $(document).width(),
innerHeight: $(document).height()
});
});
答案 6 :(得分:2)
据我所知,带iframe: true
的彩盒无法调整大小。 iframe: false
的颜色只能调整高度(使用jQuery.fn.colorbox.resize()
)。
答案 7 :(得分:1)
$.colorbox.resize()
如果你不碰巧知道活动彩盒的选择器,这也适用于活动彩盒。
答案 8 :(得分:1)
所以,这是另一种可能非常容易实现的解决方案(虽然它适用于您正在调用的所有彩盒,因此根据您的情况,它可能不是最好的)。如果这适合您,您只需将代码拖放到代码中的任何位置,它就会自动运行。 HEIGHT_PERCENTAGE和WIDTH_PERCENTAGE值可以设置窗口相对于整个窗口大小调整大小的大小。您可以添加一些其他值来创建最小尺寸等。
$(function() {
$(window).bind('resize', function() {
var HEIGHT_PERCENTAGE = .60; // '1' would set the height to 100%
var h = "innerHeight" in window
? window.innerHeight
: document.documentElement.offsetHeight;
h *= HEIGHT_PERCENTAGE;
var WIDTH_PERCENTAGE = .40; // '1' would set the width to 100%
var w = "innerHeight" in window
? window.innerWidth
: document.documentElement.offsetWidth;
w *= WIDTH_PERCENTAGE;
$.colorbox.resize({width: w, height: h});
}).trigger('resize');
});
此答案的部分内容改编自:https://stackoverflow.com/a/3012772/1963978
答案 9 :(得分:0)
好吧,我之前没有使用过Colorbox,但是我使用过类似的东西,如果我理解正确的话,你需要做的就是在加载完东西之后改变盒子的样式。
如果您发现哪些id / class值应用于Colorbox,您可以使其在加载AJAX内容时调用一个函数来更改Colorbox相应部分的样式。
答案 10 :(得分:0)
您可以在它提供的回调函数中调用它:
$(".single").colorbox({}, function(){
alert('Howdy, this is an example callback.');
});
答案 11 :(得分:0)
克里斯的回答让我走到了一半,但它在IE7 / 8中引起了一个巨大的错误,因为它会在每次窗口调整大小时调用该函数,甚至奇怪地在一些导致回发的asp.net按钮上?!?!即使没有活动的彩盒。
这似乎可以解决它:
$(window).resize(function(){
if ($('#colorbox').length) {
if( $('#colorbox').is(':hidden') ) {
}
else {
$.fn.colorbox.load();
}
}
});
它检查#colorbox是否存在使用.length,然后检查它是否隐藏哪个技巧就像我在Firebug中看到的那样,当你关闭彩色盒时它没有完全删除/破坏只是隐藏!
希望这会有所帮助..
答案 12 :(得分:0)
如果您可以在iframe中检测内容的高度/宽度,则可以这样做,然后您可以使用colorbox.resize()函数再次调整颜色框的大小。
答案 13 :(得分:0)
不确定您在寻找什么但我在寻求自己的解决方案时找到了这个帖子。我在iframe模式下有一个colorbox。在那里有一个按钮,当点击时,需要用新的颜色框替换当前的颜色框。我这样做......
parent.$.colorbox({
href: newurl,
iframe: true,
width: "600px",
height: "240px",
onClosed: function() {
}
});
这会将新页面重新加载到同一位置的新颜色框中,并且过渡非常顺利。
答案 14 :(得分:0)
这个兄弟正在努力工作。
jQuery( document ).ready( function(){
var custom_timeout = ( function() {
var timers = {};
return function ( callback, ms, uniqueId ) {
if ( !uniqueId ) {
uniqueId = "Don't call this twice without a uniqueId";
}
if ( timers[uniqueId] ) {
clearTimeout ( timers[uniqueId] );
}
timers[uniqueId] = setTimeout( callback, ms );
};
})();
$(".group1").colorbox({rel:'group1', width:"80%" });
$( window ).resize( function(){
custom_timeout(function(){
if( $('#cboxOverlay' ).css( 'visibility' ) ){
$(".group1").colorbox.resize({ innerWidth:'80%' });
}
}, 500 );
});
});
答案 15 :(得分:0)
$(window).resize(function(){
$.colorbox.resize({
maxWidth:"auto",
width:95+'%',
});
});