72 votes

Pourquoi jQuery n'utilise-t-il pas requestAnimationFrame?

Certains navigateurs prennent en charge requestAnimationFrame, alors pourquoi ne pas l'utiliser? Après tout, il a été pris en charge depuis Google Chrome 10. Malgré cela, jQuery ne semble pas être de l'utiliser. J'ai trouvé un rapport de bug à ce sujet, mais pas de réelle explication a été donnée? Je suis sûr que le jQuery, les gens ont leurs raisons, cependant.

Pourquoi n'auraient-ils pas utiliser ce génial API?

74voto

Mitar Points 1621

Dans le ticket #9381 vous pouvez lire pourquoi ils ont arrêté à l'aide de requestionAnimationFrame après un certain temps.

Pour résumer, des problèmes ont été que les animations ne fonctionne pas (les navigateurs essayer de réduire la charge du PROCESSEUR) lorsque la fenêtre n'a pas le focus, ce qui est OK si la fenêtre est masquée, mais pas si elle est visible, juste à la sortie de la mise au point. En outre, l'animation des files d'attente empilés et une fois la fenêtre retrouvé l'accent, les choses étaient aux anges. Cela nécessiterait laid changements dans le code et/ou des changements de la façon dont les gens ajouter des choses à l'animation de la file d'attente. Donc, il a été décidé que le support est retiré jusqu'à ce qu'il y a une meilleure façon de le faire.

12voto

Chris Moschini Points 7278

Vu les autres réponses et objections ici, j'ai voulu tester cela sur un simple diaporama de l'animation:

http://brass9.com/nature

En 2013, le objections dans d'autres réponses ici ne semble plus importante. J'ai ajouté

https://github.com/gnarf/jquery-requestAnimationFrame/blob/master/src/jquery.requestAnimationFrame.js

à mon code d'animation et vérifiées, c'est d'allumer et d'affecter le fondu des animations en cours d'utilisation. Il fonctionne de manière fiable, même en arrière-plan de windows, Chrome 30, IE 11 et 24 FF. Test Android 2.3, il semble utiliser le polyfill et fonctionnent comme prévu.

Je suis content qu'il soit si facile d'ajouter gnarf du code d'un projet visant à utiliser requestAnimationFrame, mais au moins d'après cette enquête sur les navigateurs, il semble comme il est de temps de jquery pour mettre en œuvre dans jquery de base.

6voto

jfriend00 Points 152127

Dans le jQuery source pour v1.6.2, je vois requestAnimationFrame être utilisée si elle est présente. Je n'ai pas étudié le code en détail afin de voir qu'il est utilisé pour tout ce qu'il pourrait être utilisé pour, mais il est utilisé dans l'animation de la section du code au lieu d'un appel à l' setInterval(). Voici le code de la 1.6.2:

// Start an animation from one number to another
custom: function( from, to, unit ) {
    var self = this,
        fx = jQuery.fx,
        raf;

    this.startTime = fxNow || createFxNow();
    this.start = from;
    this.end = to;
    this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
    this.now = this.start;
    this.pos = this.state = 0;

    function t( gotoEnd ) {
        return self.step(gotoEnd);
    }

    t.elem = this.elem;

    if ( t() && jQuery.timers.push(t) && !timerId ) {
        // Use requestAnimationFrame instead of setInterval if available
        if ( requestAnimationFrame ) {
            timerId = true;
            raf = function() {
                // When timerId gets set to null at any point, this stops
                if ( timerId ) {
                    requestAnimationFrame( raf );
                    fx.tick();
                }
            };
            requestAnimationFrame( raf );
        } else {
            timerId = setInterval( fx.tick, fx.interval );
        }
    }
},

Je ne suis pas encore à l'aide de 1.6.4 donc je ne connais pas cette version. Si ce n'est pas dans cette version, alors il doit y avoir eu quelques problèmes de sorte qu'il a été supprimé.

EDIT:

Si vous lisez ce blog, il sonne comme il a été sorti de 1.6.3 et peut-être seront remis en 1.7 et la principale raison, il a été tiré, c'est parce qu'il a brisé des choses que les gens ont été "mal" à l'aide de l'animation de la file d'attente pour (mais peut-être que c'est une question d'opinion).

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