Retarder l'execution d'une fonction

5/5 (9 avis)

Vue 11 895 fois - Téléchargée 759 fois

Description

Il existe la méthode setInterval pour exécuter une fonction à intervalles de temps réguliers. Le seul moyen de stopper ces appels et d'utiliser clearInterval ; mais il nous faut alors connaître le nombre (idInterval) retourné par setInterval.
Il n'est donc pas évident d'utiliser cet ID à l'intérieur même de la fonction appellée.

La syntaxe est similaire à celle de setInterval.

Source / Exemple :


/** 

  • Retarder l'exécution d'une fonction
  • @author: Jérôme Tamarelle [ http://tibulle.com ]
  • @date: 05-06-2005
  • @version 2.0
  • * * *
  • Fonctions avec syntaxe similaire à celle de setInterval,
  • elles permettent :
  • 1. exécuter une fonction en différé :
  • setInterval(fun, time, args...)
  • setInterval(obj, funame, time, args...)
  • 2. exécuter une fonction n fois à interval de temps régulier :
  • setInterval(n, fun, time, args...)
  • setInterval(n, obj, funame, time, args...)
          • /
class com.superdevy.utils.Delay { //---o Metas public static var className:String = "Delay"; public static var classPackage:String = "com.superdevy.utils"; public static var version:String = "2.0"; public static var author:String = "SuperDevy"; public static var link:String = "http://tibulle.com/"; //---o Fonction unique public static function setDelay (a, b, c, d) :Number { var obj:Object, fun:Function, nb:Number, args:Array, time:Number; if (typeof(a)=="number" && typeof(c)=="string") { obj=b, fun=b[c], nb=a, args=arguments.slice(3), time=d; } else if (typeof(a)=="number" && (b instanceof Function)) { obj=null, fun=b, nb=a, args=arguments.slice(2), time=c; } else if (typeof(b)=="string") { obj=a, fun=a[b], nb=1, args=arguments.slice(3), time=c; } else if (a instanceof Function) { obj=null, fun=a, nb=1, args=arguments.slice(2), time=b; } else { return NaN; } var interval = function(obj:Object, args:Array) :Void { fun.apply(obj, args); if((--nb)<1) clearInterval(idInterval); } var idInterval = setInterval(interval, time, obj, args); return idInterval; } //---o Supprime tous les intervals public static function clearAllIntervals (Void) :Void { var i = setInterval(Function, 1000) + 1; while (i>0) clearInterval(--i); } }

Conclusion :


Il est possible de porter les fonctions pour Flash MX.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
diverman Messages postés 4 Date d'inscription vendredi 19 janvier 2007 Statut Membre Dernière intervention 26 janvier 2007
24 janv. 2007 à 18:12
Je suis un peu nouveau,
donc est ce que quelqu'un pourrait m'expliquer comment faire pour qu'au bout de 10 minutes un son apparaisse(et quelle est la meilleure fonction pour mettre un son dans une animation)!!!

merci d'avance
SuperDevy Messages postés 842 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 2 juillet 2007
5 juin 2005 à 00:36
J'ai mis à jours la classe vers la version 2.0
Les quatres fonctions initiales ont été concaténées en une seule, pour que l'utilisation soit plus aisée.

Le Zip contient toujours l'ancienne version 1.0
snaaake3 Messages postés 2 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 29 mai 2005
29 mai 2005 à 09:38
Salut SuperDevy,
Ca marche Nikel, Merci merci beaucoup, tu m'enlèves une sacrée épine du pied
Au plaisir
snaaake3
SuperDevy Messages postés 842 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 2 juillet 2007
29 mai 2005 à 01:09
Tu devrais trouver réponse à ton problème ici :
http://wiki.media-box.net/classes/flash/com/superdevy/utils/delay
snaaake3 Messages postés 2 Date d'inscription jeudi 23 décembre 2004 Statut Membre Dernière intervention 29 mai 2005
27 mai 2005 à 14:11
Bonjour,

Je suis un peu nouveau, mais pourrais-tu me donner un exemple d'utilisation de setDelay().
Je voudrais appeler une fonction qui va mettre en pause un flux video au bout d'une certaine durée que j'ai.
A l'appui d'un bouton, je voudrais lancer setDelay, qui executera ma fonction de pause de flux video au bout d'un temps que je précise.

Pourrais tu m'expliquer comment faire ca?

Merci d'avance

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.