Я смог вызвать функцию обратного вызова минимум за 250 мс, используя звуковую метку и обработав событие ontimeupdate. Его вызывали 3-4 раза в секунду. Лучше, чем одна секунда отстает setTimeout
я естьsetInterval
запускать фрагмент кода 30 раз в секунду. Это прекрасно работает, однако, когда я выбираю другую вкладку (так что вкладка с моим кодом становится неактивной),setInterval
по какой-то причине установлен в состояние ожидания
Я сделал этот упрощенный контрольный пример (http://jsfiddle.net/7f6DX/3/):
var $div = $('div');
var a = 0;
setInterval(function() {
a++;
$div.css("left", a)
}, 1000 / 30);
Если вы запустите этот код, а затем переключитесь на другую вкладку, подождите несколько секунд и вернетесь назад, анимация продолжится в том же положении, в каком она была при переходе на другую вкладку. Таким образом, анимация не запускается 30 раз в секунду, если вкладка неактивна. Это можно подтвердить, посчитав, сколько разsetInterval
функция вызывается каждую секунду - это будет не 30, а только 1 или 2, если вкладка неактивна.
Я предполагаю, что это сделано специально для улучшения производительности, но есть ли способ отключить это поведение? Это на самом деле недостаток в моем сценарии.