Vous pouvez le faire de différentes manières. Cela peut être aussi subtil qu'un petit statut sur la page disant "Chargement...", ou aussi fort qu'un élément entier qui grise la page pendant le chargement des nouvelles données. L'approche que j'adopte ci-dessous vous montre comment réaliser les deux méthodes.
La mise en place
Commençons par obtenir une belle animation de "chargement" à partir de http://ajaxload.info ( Je vais utiliser http://i.stack.imgur.com/FhHRx.gif ).
Créons un élément que nous pouvons afficher/masquer chaque fois que nous faisons une requête ajax :
<div class="modal"><!-- Place at bottom of page --></div>
Le CSS
Ensuite, nous allons lui donner un peu de style :
/* Start by setting display:none to make this hidden.
Then we position it in relation to the viewport window
with position:fixed. Width, height, top and left speak
speak for themselves. Background we set to 80% white with
our animation centered, and no-repeating */
.modal {
display: none;
position: fixed;
z-index: 1000;
top: 0;
left: 0;
height: 100%;
width: 100%;
background: rgba( 255, 255, 255, .8 )
url('http://i.stack.imgur.com/FhHRx.gif')
50% 50%
no-repeat;
}
/* When the body has the loading class, we turn
the scrollbar off with overflow:hidden */
body.loading {
overflow: hidden;
}
/* Anytime the body has the loading class, our
modal element will be visible */
body.loading .modal {
display: block;
}
Et enfin, le jQuery
Très bien, passons à JQuery. La partie suivante est en fait très simple :
$body = $("body");
$(document).on({
ajaxStart: function() { $body.addClass("loading"); },
ajaxStop: function() { $body.removeClass("loading"); }
});
C'est fait ! Nous attachons des événements à l'élément body à n'importe quel moment de la journée. ajaxStart
ou ajaxStop
sont déclenchés. Quand un événement ajax commence, nous ajoutons la classe "loading" au corps. et quand les événements sont terminés, nous enlevons la classe "loading" du corps.
Voyez-le en action : http://jsfiddle.net/VpDUG/4952/