10
votes

Comment définissez-vous des minuteries périodiques dans d3.js?

Je veux exécuter une fonction particulière toutes les 5 minutes. Si j'écris du code comme ceci: xxx

puis f semble exécuter une fois et plus jamais.

J'ai obtenu le comportement souhaité en créant Un clone de f appelé f2 : f appels d3.timer (f2) et f2 Call d3.Timer (f) . Cela semble être un piratage laid. Y a-t-il une meilleure façon?


0 commentaires

3 Réponses :


12
votes

Ceci ressemble à un travail pour la méthode Standard JavaScript Sintinval () Méthode: XXX

Si vous en avez besoin pour exécuter une animation à chaque invocation, c'est là que < Code> d3.Timer serait utile - sinon, la standard seinterval et SetTimeout est susceptible d'être plus facile.


2 commentaires

Désolé si mon exemple n'était pas clair: En réalité, la console.log ("hi") est en effet du code d'animation D3. Je ne sais toujours pas pourquoi je voudrais (ou quiconque) vouloir utiliser d3.time au lieu d'un code de minuterie javascript standard comme seinterval . En fait, pourquoi D3.TIMER existe-t-il même si nous pouvions simplement utiliser Settimeout ?


Ok, je pense Ce fil fait la différence dégager. Merci pour ton aide!



14
votes

Je pense @ Réponse de NRABINOWITZ est probablement le meilleur et le meilleur, mais si vous souhaitez vraiment utiliser d3.ticer code>, voici comment vous le feriez.

var interval = 1000; // one second in milliseconds

var makeCallback = function() {
    // note that we're returning a new callback function each time
    return function() {
        console.log('OH HAI!!');
        d3.timer(makeCallback(), interval);
        return true;
    }
};

d3.timer(makeCallback(), interval);


2 commentaires

Pour moi, en utilisant une projection GEO, j'ai vu une amélioration de la performance de 100% en utilisant cette technique de minuterie D3 - c'est-à-dire une utilisation de la CPU de 100% à 1% pour une animation équivalente. Je suppose que c'est parce qu'une image d'animation est demandée.


En outre, l'utilisation de la minuterie garantit que lorsque le référencier est disponible, l'animation ne fonctionne pas lorsque l'onglet n'est pas au premier plan



1
votes

On dirait que d3.Interval est une chose, et est censé être un remplaçant pour seinterval: https://github.com/d3/d3-timer#Interval xxx


0 commentaires