Bonjour,
Je viens vers vous car je bloque sur un script depuis quelques temps. Sur le site que je suis en train de réaliser, je gère le chargement des pages avec Ajax. Tout fonctionne à un détail près : lorsque je change de page, sa hauteur s'anime pour prendre progressivement la dimension de la nouvelle. Cela fonctionne parfaitement pour les pages où il n'y a que du texte, mais ça se complique dès qu'il y a quelques images car mon script n'a pas le temps de calculer la hauteur de la nouvelle page. Voici mon code :
J'avais trouvé une "solution" en utilisant setTimeout. En revanche, cette solution ne me plaît pas car les délais d'affichage ne sont pas du tout optimisés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 if( $(this).attr('pageId') == "index" ) { // Fade Out sur le contenu $('footer').animate({opacity: 0}, 'slow'); $('#content').animate({opacity: 0}, 'slow', function() { // On ramène la hauteur à 400px (taille minimale définie dans le CSS) $('#page').animate({height: 400}, 'slow', function() { // On efface le contenu $('#content').html(''); // On charge le nouveau $.ajax({ type: 'GET', url: 'include/news_feed.php', dataType: 'html', error: function(msg, string) { alert( "ERROR : " + string ); }, success: function(data) { $('#content').html(data); // Calcul des nouvelles dimensions de la page var page = $('#page'), curHeight = page.height(), autoHeight = page.css('height', 'auto').height(); // On anime la taille avec la nouvelle valeur page.height(curHeight).animate({height: autoHeight}, 1000, function() { // On affiche le contenu $('#content').animate({opacity: 1}, 'slow'); $('footer').animate({opacity: 1}, 'slow'); }); } }); currentPageId = 'index'; }); }); }
Ce que j'aimerais, c'est que la partie du code qui récupère la hauteur de la nouvelle page ne soit exécutée qu'une fois la page totalement chargée. J'ai pour cela essayé les différentes méthodes .done(), .load(), success ou encore complete, mais aucune n'a fonctionné.
Si vous avez une idée...
Merci pour votre aide !
Partager