Est-ce que quelqu'un sait comment redimensionner la Fancybox jQuery pendant l'exécution?
Lors de l'initialisation de la fancybox, je peux le faire:
$("tag").fancybox({ 'frameWidth': 500, 'frameHeight': 700 });
Je remplis la fancybox de contenu dynamique et je souhaite la redimensionner en fonction du contenu.
Si vous utilisez la version 1.3 de Fancybox, il existe une méthode de redimensionnement:
$ .fancybox.resize ();
Pour la version 2.x de Fancybox , la même chose serait faite avec:
$ .fancybox.update ()
Ce qui redimensionnera la boîte active en fonction de la taille du contenu qu'elle contient.
La solution d'Alan est incomplète car la boîte n'est plus centrée sur l'écran après modification de la taille (du moins avec les dernières versions de jquery et fancybox).
La solution complète serait donc:
$("#fancy_outer").css({'width': '500px', 'height': '500px'});
$("tag").fancybox.scrollBox();
Je veux juste vous en faire prendre conscience.
Après avoir cherché des solutions utilisant javascript pour régler la hauteur, mon partenaire et moi avons réalisé quelque chose d'étonnant.
Vérifiez si les éléments contenant de # fancybox-inner ont PADDING ou MARGIN.
C'est l'élément clé (enfants directs de la définition de # fancybox-inner margin/padding.
Les éléments enfants (# fancyfox-inner> div> .here) peuvent avoir un rembourrage, mais n'oubliez pas de régler:
$('#element').fancybox({
'onComplete' : function(){
$.fancybox.resize();
}
});
J'ai trouvé une solution à ce bogue après l'avoir cherché longtemps dans Google sans rien trouver.
Pour redimensionner la boîte à la largeur et à la hauteur de la page et la centrer, procédez comme suit:
$("#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();
}
});
});
$ ("# fancybox-wrap"). width (width); // ou hauteur ou autre
$ .fancybox.center ();
Hé après presque deux jours de combat, j’ai réussi à changer la hauteur de la superposition. J'espère que cela peut être utile:
$('#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');
}
}
});
En faisant ce code, il calcule d’abord la hauteur du corps, # fancybox-content et # fancybox-overlay. Ensuite, il vérifie si la hauteur du corps est inférieure à la hauteur de la superposition. Si oui, il affecte une nouvelle hauteur calculée à la superposition, sinon il prend la hauteur du corps par défaut
Si Fancybox faisait partie de jQuery UI, procédez comme suit:
$("tag").fancybox.option('frameWidth', 500);
Mais comme cela ne semble pas fournir une telle méthode, vous devez définir directement le CSS:
$("#fancy_outer").css({'width': '500px', 'height': '500px'});
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();
}
et appelez-le à un événement quand vous avez besoin ...
... 'onSelect' : function(event,ID,fileObj){
overlay();
}, ...
Ma solution était comme ça (pour fancybox 1.3.4):
trouver
$.fancybox.resize = function() {
if (overlay.is(':visible')) {
overlay.css('height', $(document).height());
}
$.fancybox.center(true);
};
et remplacer par
$.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);
};
$ .fancybox.resize (); n'a pas fonctionné pour moi, alors j'ai mis ce code dans la page chargée, à l'intérieur de la fancybox iframe:
$(document).ready(function(){
parent.$("#fancybox-content").height($(document).height());
});
Vous pouvez également le définir dans un rappel:
$("#mydiv").toggle('fast', function(){
parent.$("#fancybox-content").height($(document).height());
});
Cette méthode fonctionne pour moi. :)
$(".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();
J'ai également eu du mal à redimensionner Fancybox. La solution est $.fancybox.reposition();
Fonctionne comme un charme!
Voici la solution de mon:
$("#linkpopup").fancybox({
'titlePosition' : 'inside',
'transitionIn' : 'none',
'transitionOut' : 'elastic',
'onComplete' : function(){
$.fancybox.resize();
}
});
Je viens de publier un correctif suggéré pour Fancybox sur son groupe Google https://groups.google.com/forum/#!topic/fancybox/fuUuBJyTrH8 qui ajoute une méthode publique $ .fancybox.reshow (). Cela recalculera la hauteur et la largeur de la boîte fantaisie. Cela fonctionne à la fois avec window.onorientationchange et window.onresize, par exemple:
window.onresize = function() {
$.fancybox.reshow();
}
Dans mon cas, j'utilise Fancybox pour afficher une page Web très simple qui ne contient qu'une image. Cette image peut varier en taille. Mon problème était que l'image n'incluait pas style="height: NNpx; width: NNpx;"
. Sans cela, la fancybox autoSize peut donner des résultats inattendus (indiqués dans leur documentation http://fancyapps.com/fancybox/ ).
tl; dr: fournit les attributs de largeur et de hauteur pour que autoSize fonctionne correctement.
Sur Fancybox 3 (version la plus récente)
parent.jQuery.fancybox.getInstance().update();
Merci à tous ceux qui contribuent à StackOverflow.com. Vous m'avez tous sauvé la vie plusieurs fois. Maintenant, je peux enfin apporter quelque chose. Voici comment j'ai pu surmonter le redimensionnement de FancyBox au moment de l'exécution:
J'ai attribué les attributs spécifiques à l'élément href avec la dimension PHP vars qui lui ont été transférés . Puis appelé et défini l'attribut dans un événement clic, avec la fonction de contrôle fancybox et les paramètres intégrés dans ...
<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();
}
});
});