2017-09-06 3 views
0

Ok, donc je dois:fonction d'appel Javascript à chaque « X » minutes par horloge

function show_popup() { 
    alert('Ha'); 
} 

Maintenant, ce que je veux est d'appeler cette fonction à chaque X minutes MAIS donnant comme référence la horloge (le temps réel).

Si X est 5, alors la fonction suivante fonctionne correctement:

setInterval(function(){ 
    var date = new Date(); 
    var minutes = date.getMinutes().toString(); 
    var minutes = minutes.slice(-1); // Get last number 

    if(minutes == 0 || minutes == 5) 
    { 
     show_popup(); // This will show the popup at 00:00, 00:05, 00:10 and so on 
    } 
}, 1000); 

Comment puis-je faire de cette fonction pour travailler si je change 5 minutes à 4 ou à 3 ou à 20?

Je dois mentionner que je ne peux pas changer la minuterie de setinterval, parce que cela signifiera que le popup ne se déclenchera que si vous êtes sur la page après avoir passé X minutes. Je ne veux pas ça. Je veux montrer le popup à des minutes spécifiques donnant la référence de l'horloge.

Répondre

0

Vous devez trouver le multiples de X

Pour ce faire, vous pouvez utiliser modulo operation, donc:

if(minutes % X === 0) { 
    show_popup(); 
} 

L'opération modulo renverra le reste de la division entre une et b, si c'est 0, c'est b est mult iple de un.

Par exemple, si vous voulez afficher toutes les 3 minutes:

1 % 3 = 1 
2 % 3 = 2 
3 % 3 = 0 //show 
4 % 3 = 1 
5 % 3 = 2 
6 % 3 = 0 //show 

Et ainsi de suite ...

+0

Vous êtes les bienvenus, heureux de vous aider. –

0

deux façons, il suffit d'exécuter le code pour voir les résultats (dans le navigateur chrome)

1.Utilisez minuterie et vous pouvez changer la période suivante lorsque tick arrive, la minuterie n'est pas précis

class MyInterval { 
 
    constructor(defaultInterval, callback) { 
 
    this.interval = defaultInterval 
 
    this.callback = callback 
 
    this._timeout = null 
 
    this.tick() 
 
    } 
 

 
    tick() { 
 
    const { 
 
     interval, 
 
     callback 
 
    } = this 
 
    this._timeout = setTimeout(() => { 
 
     callback() 
 
     this.tick() 
 
    }, interval) 
 
    } 
 

 
    stop() { 
 
    clearTimeout(this._timeout) 
 
    } 
 
    changeInterval(interval) { 
 
    this.interval = interval 
 
    } 
 
} 
 

 
const myInterval = new MyInterval(1000,() => console.log(new Date())) 
 

 
setTimeout(() => { 
 
    myInterval.changeInterval(2000) 
 
}, 3500) 
 

 

 
setTimeout(() => { 
 
    myInterval.stop(2000) 
 
}, 13500)

2.Utilisez un intervalle minimal, plus prompts à réagir, a une limite minimale, peut coûter plus

class MyInterval { 
 
    constructor(minimal, defaultInterval, callback) { 
 
    this.minimal = minimal 
 
    this.interval = defaultInterval 
 
    this.callback = callback 
 
    this._current = 0 
 
    this._timeout = setInterval(() => { 
 
     this._current++ 
 
     if (this._current >= this.interval) { 
 
      this._current = 0 
 
      callback() 
 
     } 
 

 
    }, minimal) 
 

 

 
    } 
 
    stop() { 
 
    clearInterval(this._timeout) 
 
    } 
 
    changeInterval(interval) { 
 
    this.interval = interval 
 
    } 
 
} 
 

 
const myInterval = new MyInterval(1000, 1,() => console.log(new Date())) 
 

 
setTimeout(() => { 
 
    myInterval.changeInterval(2) 
 
}, 3500) 
 

 

 
setTimeout(() => { 
 
    myInterval.stop() 
 
}, 13500)