2012-01-09 3 views
4

У меня есть сценарий, когда один клиентский ПК будет управлять несколькими ЖК-дисплеями, каждый из которых показывает одно окно браузера. Эти окна браузера показывают разные данные, которые находятся в анимированном цикле, используя jquery.Триггеры событий Javascript, основанные на локальных часах

Мне нужно убедиться, что оба браузера можно синхронизировать, чтобы вращаться в одно и то же время, иначе они будут анимироваться в разное время.

Итак, мой вопрос: могу ли я активировать jquery для чередования содержимого на основе локальных часов ПК?

например каждый раз, когда часы секунд == 0, показывают версию 1, каждый раз, когда часы секунд == 30, показывают версию 2 и т. Д.?

+1

вы пробовали? –

+0

'if (getSeconds() == 0) {} else if (getSeconds() == 30) {}' –

+0

Это не синхронизирует их. Мне нужно событие, чтобы вызвать точно, когда секундные повороты 30 или 0 – hud

ответ

6

Это (по моему опыту) самый точный способ получить таймеры, чтобы вызвать как можно ближе ко времени, часы:

// get current time in msecs to nearest 30 seconds 
var msecs = new Date().getTime() % 30000; 

// wait until the timeout 
setTimeout(callback, 30000 - msecs); 

Затем в обратный вызов после того, как все сделано, сделайте то же самое, чтобы вызвать следующее событие.

Использование setInterval вызывает другие проблемы, включая дрифт часов. Расчет, основанный на текущем времени, учитывает время выполнения самого обратного вызова.

Вам также нужно будет использовать Date().getTime(), а также выяснить, какой кадр вашей анимации показывать.

Все это будет выглядеть примерно так:

function redraw() { 
    var interval = 30000; 

    // work out current frame number 
    var now = new Date().getTime(); 
    var frame = Math.floor(now/interval) % 2; // 0 or 1 

    // do your stuff here 
    .. some time passes 

    // retrigger 
    now = new Date().getTime(); 
    setTimeout(redraw, interval - (now % interval)); 
} 

redraw(); 

рабочую демо на http://jsfiddle.net/alnitak/JPu4R/

+0

Отличное решение, отлично работало – hud

0

Ответ: да, вы можете.

  • Использование Date.getTime() для контроля времени
  • Trigger ваши JS работать каждые 30 секунд
+0

Вы всерьез предполагаете, что он _poll_ на время меняется? – Alnitak

+0

Это не повлияло бы на синхронизацию двух браузеров, потому что я не мог обеспечить их опрос в одно и то же время – hud

0

Почему бы не запустить одно окно с другой - таким образом родительское окно будет иметь полный контроль над тем, когда начинается анимация , потому что они находятся в ОДНОМ ПРОЦЕССЕ. Никаких часов не требуется.

-1

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

var t=setInterval("check()",1000); 
function check(){ 
    var d = new Date(); 
    if(d.getSeconds() == 0) 
    { 
     alert('do something'); 
    } else if (d.getSeconds() == 30) 
    { 
     alert('do something else'); 
    } 
} 
Смежные вопросы