Bonjour,
Mon problème est assez étrange et je n'ai rien trouvé sur le net ressemblant à ça. La fonction callback de show() s'éxecute avant d'avoir fini de chargé l'objet jQuery qui appelle show(), sous firefox/edge aucun soucis. Par contre sur Chrome je ne comprend pas, il l'éxcute correctemet le script mais une fois tout les 5 rafraichissements... D'où l'utilisation la fonction setTimeout de 200ms. J'espère que vous comprendrez avec cet exemple :
/css
.main{
position : relative;
height : 0px;
width: 100%;
}
section{
display: none;
opacity: 0;
position: absolute;
top: 0;
left: 0;
}
/js
$(document).ready(function(){
activeItem = {
activeItem : 'informations',
subcat : 'compte'
};
$ctn = $('section#ctn'+capitalizeFirstLetter(activeItem.subcat));
$ctn.css('opacity', 1);
setTimeout(function(){ // ***** CHROME *******
$ctn.show(function(){
height = $ctn.outerHeight(true); // height recuperer de l'objet en absolute
// La valeur height varie selon les rafraichissements
console.log('height apres show', height, $ctn.outerHeight(true), $ctn.height());
$('.main').height(height); // Le main est redimensionner en conséquence
height = $('.main').innerHeight(); // Du coup une dimension tronqué
}).promise().done(function(){
console.log('show est fini');
});
}, 400);
});
Le but du code : adapter la hauteur du .main par rapport à un item placé en absolute (son contenu est généré en PHP)
Recuper un container ($ctn = #ctnInformations) puis mettre son opacity à 1
$ctn = $('section#ctn'+capitalizeFirstLetter(activeItem.subcat));
$ctn.css('opacity', 1);
Puis lui appliquer la fonction show() et récupérer ses dimensions
setTimeout(function(){ // FUCKIN CHROME *******
$ctn.show(function(){
height = $ctn.outerHeight(true); // height recuperer de l'objet en absolute
// La valeur height varie selon les rafraichissements
console.log('height apres show', height, $ctn.outerHeight(true), $ctn.height());
$('.main').height(height); // Main est redimensionner en conséquence
height = $('section').innerHeight(); // Du coup une dimension tronqué
}).promise().done(function(){
console.log('show est fini');
});
});
}, 400);
Exécuter le script sans TimeOut sur Chrome
Si vous enlevez le setTimeout : chrome exécute trop vite le code. Firefox et Edge pas de problème.
Salut à tu regarder la doc pour la fonction .show
car elle très bien expliqué,
[http://www.w3schools.com/jquery/jquery_hide_show.asp]()
[http://api.jquery.com/show/]()
La fonction .show
est défini comme ceci:
$(selector).show(speed,callback);
Il ne te reste plus qu'à suivre cette exemple, dans ton cas sa doit donner quelque chose comme ça:
$ctn.show("fast", function(){
height = $ctn.outerHeight(true); // height recuperer de l'objet en absolute
// La valeur height varie selon les rafraichissements
console.log('height apres show', height, $ctn.outerHeight(true), $ctn.height());
$('.main').height(height); // Main est redimensionner en conséquence
height = $('section').innerHeight(); // Du coup une dimension tronqué
});
Normalement sa devrai fonctionner sinon réfère toi à la documentation. Bye ;)
Wah en effet sa fonctionne correctement, je pensais que se paramètre était falcultatif mais en faite il exécutait le callback trop tôt.
Merci beaucoup :)