2015-07-23 5 views
2

Я хочу вызвать функцию jquery каждый полный час. Так 11:00, 12:00, 13:00 и т.д.Вызов функции каждый полный час

Вот функция:

function flipIt() { 
    $('#flip').addClass('animate pulse'); 
    $('#flip').removeClass('animate pulse').delay(1500); 
} 

Как я могу назвать это каждый полный час?

ответ

4

Вы можете сделать:

setInterval(function(){ 
 
    
 
    if(new Date().getMinutes() === 0) { 
 
    flipIt() 
 
    } 
 
},60000) 
 

 
// for testing 
 
setInterval(function(){ 
 
    if(new Date().getSeconds() === 0) { 
 
    alert("new minute !"); 
 
    } 
 
},1000) 
 

 
function flipIt() { 
 
    $('#flip').addClass('animate pulse'); 
 
    $('#flip').removeClass('animate pulse').delay(1500); 
 
}

+1

Я забыл один '0', это' 60000' (одна минута), каждую минуту он проверяет, является ли это новым часом (минуты = 0), 'flipIt()' вызывается только один раз в часах на 'xx: 00' –

0
window.setInterval(function(){ 
    /// call your function 
}, 3600000); 
+1

Но это вызывает функцию каждый час, начиная с того момента, когда пользователь нажимает на страницу, а не каждый ** полный ** час, верно? – Zoker

1

Решение, которое вызывает только один раз в час:

function alertNextHour() { 
    var nextAlert = new Date(); 
    nextAlert.setHours(nextAlert.getHours() + 1); 
    nextAlert.setMinutes(0); 
    nextAlert.setSeconds(0); 
    nextAlert.setMilliseconds(0); 

    var timeToNextAlert = nextAlert - new Date(); 

    setTimeout(function() { 
     // do what you want 

     alertNextHour(); 
    }, timeToNextAlert);  
} 
+1

'setInterval' =>' setTimeout' –

1

Вот подход, который зависит от динамического интервала. Следующая функция будет установить тайм-аут в зависимости от того, сколько времени осталось до полного часа:

function getDelay(){ 
    var date = new Date(); 
    var hour = date.getMinutes(); 
    return (60 - hour) * 60 * 1000; //get the milliseconds until the next full hour 
} 

delay = getDelay(); 
var dynamicInterval = function(){ 
    clearInterval(interval); //stop the current interval 
    delay = getDelay(); 
    interval = setInterval(dynamicInterval, delay); //set the new interval with the new delay 
} 
var interval = setInterval(dynamicInterval, delay); //initial start of the interval 

Demo

Примечание: демо сделки с секунд, а не минут.

Смежные вопросы