1. #1
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    février 2009
    Messages
    5 703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2009
    Messages : 5 703
    Points : 21 041
    Points
    21 041
    Billets dans le blog
    39

    Par défaut Exécute une action à la minute ou à la seconde prévue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    /*
     * Exécute une action à la minute prévue, toutes
     * les 5 minutes en commençant à hh:03.
     * 
     * Le programme exécute la fonction de rappel lorsque l'une
     * des valeurs de l'array tab est égale au nombre de minutes
     * dans l'heure puis s'interrompt pendant 4 minutes avant de
     * reprendre son travail chaque seconde.
     * 
     * Si boolMinute est false, le programme exécute une action
     * toutes les 5 secondes et se repose 2,5 secondes.
     */
    function execute( callback, boolMinute ){
    	var bool = boolMinute || true,
    		appel = callback || function(){},
    		tab = [ 3, 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58 ],
    		objInterval = setInterval( function(){
    			tab.forEach( function( value ){
    				if ( bool && value == new Date().getMinutes() ){
    					appel( value );
    					clearInterval( objInterval );
    					setTimeout( function(){
    						execute( appel, bool );
    					}, 240000 ); // repos pendant 60000 * 4 minutes
    					return;
    				} else if ( value == new Date().getSeconds() ){
    					appel( value );
    					clearInterval( objInterval );
    					setTimeout( function(){
    						execute( appel, bool );
    					}, 2500 ); // repos pendant 2,5s
    					return;
    				}
    			});
    		}, 1000 );
    }
     
    function action( valeur ){
    	console.log( valeur );
    }
     
    execute( action ); // ou execute( action, false );

    Blog



    Nota bene : si vous devez être compatible avec les navigateurs obsolètes (IE8 et plus), vous devez convertir les codes ES2015 en ES5 avec Babel.

    FAQ JS Tutoriels JS

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    février 2009
    Messages
    5 703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2009
    Messages : 5 703
    Points : 21 041
    Points
    21 041
    Billets dans le blog
    39

    Par défaut Version 1.1.0 !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    /*
     * Exécute une action selon l'horaire prévu dans l'array
     * horaireArray, en secondes.
     * 
     * Le programme exécute la fonction de rappel lorsque l'une
     * des valeurs de horaireArray est égale au nombre de secondes
     * de l'instant T.
     * 
     * L'array horaireArray doit contenir exclusivement des 
     * nombres entiers.
     */
    function execSecondes( horaireArray, callback ){
    	var appel = callback || function(){},
    		tab = horaireArray || [ 15, 30 ],
    		last = -1;
     
    	return setInterval( function(){
    		tab.forEach( function( value ){
    			if ( value != last && value == new Date().getSeconds() ){
    				last = value;
    				appel( value );
    				return;
    			}
    		});
    	}, 500 );
    }
     
    /*
     * Exécute une action selon l'horaire prévu dans l'array
     * horaireArray, en minutes.
     * 
     * Le programme exécute la fonction de rappel lorsque l'une
     * des valeurs de horaireArray est égale au nombre de minutes
     * de l'instant T.
     * 
     * L'array horaireArray doit contenir exclusivement des 
     * nombres entiers.
     */
    function execMinutes( horaireArray, callback ){
    	var appel = callback || function(){},
    		tab = horaireArray || [ 15, 30 ],
    		last = -1;
     
    	return setInterval( function(){
    		tab.forEach( function( value ){
    			if ( value != last && value == new Date().getMinutes() ){
    				last = value;
    				appel( value );
    				return;
    			}
    		});
    	}, 1000 );
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /*
     * Exemple 1.
     * 
     * Exécute la fonction action selon l'horaire prévu en secondes.
     */
    function actionSecondes( valeur ){
    	console.log( "secondes = ", valeur );
    }
     
    var ObjIntervalSecondes = execSecondes( [ 3, 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58 ], actionSecondes );
     
    setTimeout( function(){
    	clearInterval( ObjIntervalSecondes );
    }, 240000 ); // 60000 * 4 = 240000; 4 minutes !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /*
     * Exemple 2.
     * 
     * Exécute la fonction action selon l'horaire prévu en minutes.
     */
    function actionMinutes( valeur ){
    	console.log( "minutes = ", valeur );
    }
     
    var ObjIntervalMinutes = execMinutes( [ 3, 7, 15, 22, 28, 31, 32, 45, 53, 59 ], actionMinutes );
     
    setTimeout( function(){
    	clearInterval( ObjIntervalMinutes );
    }, 7200000 ); // 60000 * 60 * 2 = 7200000; 2 h !

    Blog



    Nota bene : si vous devez être compatible avec les navigateurs obsolètes (IE8 et plus), vous devez convertir les codes ES2015 en ES5 avec Babel.

    FAQ JS Tutoriels JS

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. Comment exécuter une action dans x minutes ?
    Par ddubois dans le forum Langage
    Réponses: 6
    Dernier message: 16/11/2007, 19h39
  2. Exécuter une action à une heure précise
    Par Rhadamanthe59 dans le forum Outils
    Réponses: 3
    Dernier message: 09/02/2006, 23h12
  3. Exécuter une action quand on ferme le navigateur
    Par Leobaillard dans le forum JavaScript
    Réponses: 5
    Dernier message: 08/01/2006, 12h41
  4. Réponses: 1
    Dernier message: 25/10/2005, 13h25
  5. Exécuter une action à la fermeture d'une fenêtre
    Par wwave dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 28/07/2005, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo