Как вы изменяете размер Fancybox во время выполнения?
Кто-нибудь знает, как изменить размер jQuery Fancybox во время выполнения?
При инициализации fancybox я могу это сделать:
$("tag").fancybox({ 'frameWidth': 500, 'frameHeight': 700 });
Я заполняю fancybox динамическим контентом, и я хочу, чтобы он изменялся в соответствии с содержимым.
Ответы
Ответ 1
Если вы используете версию Fancybox версии 1.3, существует способ изменения размера:
. $fancybox.resize();
Для версии 2.x из Fancybox то же самое можно было бы сделать с помощью
$. Fancybox.update()
Что изменит размер активного fancybox на основе размера содержимого внутри него.
Ответ 2
Решение Alan является неполным, поскольку окно больше не центрируется на экране после изменения размера (по крайней мере, с последними версиями jquery и fancybox).
Итак, полным решением будет:
$("#fancy_outer").css({'width': '500px', 'height': '500px'});
$("tag").fancybox.scrollBox();
Ответ 3
$( "# FancyBox-обертка" ) ширина (ширина).//или высота или что-то еще
. $fancybox.center();
Ответ 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. Затем он проверяет, меньше ли высота по высоте, чем высота наложения, если да, то она назначает новую расчетную высоту для наложения, иначе она принимает высоту по умолчанию
Ответ 5
Я просто хочу, чтобы вы знали об этом.
После поиска решений с использованием javascript для регулировки высоты меня и моего партнера поняли что-то потрясающее.
Проверьте, установлены ли содержащиеся элементы # fancybox-inner PADDING или MARGIN.
Это ключевой элемент (прямые дочерние элементы определения # fancybox-inner margin/padding.
Элементы children (# fancyfox-inner > div > .here) могут иметь прописку, но не забудьте настроить:
$('#element').fancybox({
'onComplete' : function(){
$.fancybox.resize();
}
});
Ответ 6
Я нашел одно решение этой ошибки после долгого поиска в Google, но ничего не нашел.
Чтобы изменить размер окна на ширину и высоту страницы и центрировать ее, сделайте следующее:
$("#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();
}
});
});
Ответ 7
Если Fancybox был частью пользовательского интерфейса jQuery, вы бы сделали это следующим образом:
$("tag").fancybox.option('frameWidth', 500);
Но, как представляется, такой метод не нужен, вам нужно установить CSS напрямую:
$("#fancy_outer").css({'width': '500px', 'height': '500px'});
Ответ 8
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 event → long file list делает fancybox настолько большим, и мы снова вычисляем высоту)
... 'onSelect' : function(event,ID,fileObj){
overlay();
}, ...
Ответ 9
. $fancybox.resize(); не работал у меня, поэтому я поместил этот код на загруженную страницу внутри fancybox iframe:
$(document).ready(function(){
parent.$("#fancybox-content").height($(document).height());
});
Вы также можете установить его в обратном вызове:
$("#mydiv").toggle('fast', function(){
parent.$("#fancybox-content").height($(document).height());
});
Ответ 10
Я боролся с изменением размера fancybox.
Решение $.fancybox.reposition();
Работает как шарм!
Ответ 11
Мое решение было таким (для 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);
};
Ответ 12
Этот метод работает для меня.:)
$(".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();
Ответ 13
Я только что опубликовал предложенный патч для Fancybox в своей группе Google https://groups.google.com/forum/#!topic/fancybox/fuUuBJyTrH8, который добавляет открытый метод $.fancybox.reshow(). Это позволит пересчитать высоту и ширину fancybox. Он работает как с window.onorientationchange, так и с окном window.onresize, например:
window.onresize = function() {
$.fancybox.reshow();
}
Ответ 14
Это форма решения my:
$("#linkpopup").fancybox({
'titlePosition' : 'inside',
'transitionIn' : 'none',
'transitionOut' : 'elastic',
'onComplete' : function(){
$.fancybox.resize();
}
});
Ответ 15
Спасибо всем, кто участвует в StackOverflow.com. Вы все были для меня спасателями много раз. Теперь я наконец-то кое-что внес. Ниже приведен пример того, как я смог превысить размер fancybox при запуске quandry:
Я присвоил атрибутам элемента href специфические атрибуты с параметрами PHP, переданными ему.
Затем вызывается и устанавливает атрибут в событии click, с функцией управления 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();
}
});
});
Ответ 16
В моем случае я использую Fancybox для отображения очень простой веб-страницы, содержащей только изображение. Это изображение может отличаться по размеру. Моя проблема заключалась в том, что изображение не включало style="height: NNpx; width: NNpx;"
. Без этого autoSize fancybox может дать неожиданные результаты (указанные в их документах http://fancyapps.com/fancybox/).
tl; dr: предоставить атрибуты ширины и высоты для правильной работы autoSize.
Ответ 17
Вкл Fancybox 3 (новейшая версия)
parent.jQuery.fancybox.getInstance().update();
Ссылка: http://fancyapps.com/fancybox/3/docs/#iframe
Ответ 18
Использование:
parent.jQuery.fancybox.update();