3 votes

Fonction jQuery Hide : pourquoi la vitesse : 0 essaie-t-elle toujours de s'animer ?

Je viens donc d'essayer de déboguer l'erreur suivante :

<script>
$(function() {
    div = $('<div />');
    div.text('test');
    div.hide(0);
    div.appendto('body');
});
</script>

Lorsque je l'exécute, le DIV s'affiche. Au cas où je le cache (avant de l'ajouter au DOM). Le code suivant :

<script>
$(function() {
    div = $('<div />');
    div.text('test');
    div.hide();
    div.appendto('body');
});
</script>

hace cacher le DIV.

Quand je vais dans le code source de jQuery pour la fonction hide, je vois ceci :

    hide: function( speed, easing, callback ) {
    if ( speed || speed === 0 ) {
        return this.animate( genFx("hide", 3), speed, easing, callback);

    } else {
        for ( var i = 0, j = this.length; i < j; i++ ) {
            var display = jQuery.css( this[i], "display" );

            if ( display !== "none" ) {
                jQuery.data( this[i], "olddisplay", display );
            }
        }

        // Set the display of the elements in a second loop
        // to avoid the constant reflow
        for ( i = 0; i < j; i++ ) {
            this[i].style.display = "none";
        }

        return this;
    }
},

Pourquoi vérifie-t-on

if ( speed || speed === 0 ) {

En particulier le, speed === 0. Je suppose que, lorsque la vitesse est nulle. On peut sauter la fonction animate entièrement et juste ajouter le display : none ; à l'élément.

ps. Je suppose que puisque nous donnons un élément qui n'existe pas dans le dom à la fonction animate, elle échoue tout simplement. Il n'y a rien à animer. Ainsi, la fonction animate ne cache pas réellement le DIV.

Merci pour toute réponse en avant :) J'ai cherché pendant environ 10 minutes la syntaxe correcte (hide()) au lieu de hide(0)) mais j'ai toujours trouvé cela illogique. D'où la question :)

8voto

Nick Craver Points 313913

Si vous vouliez sauter l'animation, vous pourriez simplement faire .hide() ...en permettant .hide(0) également, vous pouvez faites la queue sans une durée...donc cela ajoute beaucoup d'utilité à la fonction.

Par exemple :

$(".myElem").delay(2000).hide(0);

Alors que ça ne marcherait pas :

$(".myElem").delay(2000).hide();

....parce que .hide() sans arguments ne fait pas partie d'une fx la file d'attente, et se produirait instantanément.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X