$(document).ready(); VS $(window).load();

J'ai eu un petit bug aujourd'hui pour centrer verticallement un div (enfin une image !)

J'utilise cette fonction jquery

(function ($) {

// VERTICALLY ALIGN FUNCTION

$.fn.vAlign = function() {

        return this.each(function(i){

        var ah = $(this).height();

        var ph = $(this).parent().height();

        var mh = (ph - ah) / 2;

        $(this).css('margin-top', mh);

        });

};

})(jQuery);


Donc dans mon code j'ai fait :

$(document).ready(function() {

        alert($('#monimg').height());     

        alert($('#monimg').css('height'));

        $('#monimg').vAlign();

});


Les valeurs affichées était 0 et 0 et mon image ne s'est pas centrée !

Après de moulte recherche, je suis tombé sur une discussion !

Il existe une différence entre  $(document).ready(); et $(window).load();


$(document).ready(); : quand le document est chargé (le DOM)

$(window).load(); : quand la fenêtre est chargé (avec toutes ces images)


J'ai donc fait :


$(window).load(function() {

        alert($('#monimg').height());     

        alert($('#monimg').css('height'));

        $('#monimg').vAlign();

});


Résultat une fois toutes les images centrées, la hauteur de mon image est renvoyée et elle s'est centrée !

Encore un petit problème : le temps que toutes les images se chargent mon image #

monimg ne s'est pas centrée (ben oui 

$(window) n'était pas totalement "loadé" !

Du coup j'ai mis style="display:none;" sur mon image et ensuite j'ai mis le code dans head :

$(window).load(function() {

        $('#monimg').show();

        $('#monimg').vAlign();

});

J'en ai appris une bien bonne aujourd'hui :-)