Каким образом вы легко аниматируете индикатор прогресса в twitter-bootstrap?

У меня многопользовательская игра с 30-секундным таймером в нижней части экрана. Если ни один из игроков не делает ход в течение 30 секунд, форма отправляется.

var ProgressValue = 0;
function showProgress() {
    ProgressValue += 100/30;
    if (ProgressValue > 100) {
        $('form').submit();
    }
    // Ajax is done here to see if anyone has made a move.
    $('.progress .bar').css('width',ProgressValue + '%');
    setTimeout(showProgress, 1000);
}

setTimeout(showProgress, 1000);

Каждую секунду я проверяю область приложения, чтобы увидеть, изменилось ли значение

Application.LastMove

Я хочу, чтобы индикатор выполнения плавно анимировался, но я не хочу этого делать, уменьшая значение тайм-аута. Я думаю, что проверка того, что кто-то совершил переход каждую секунду, уже достаточно загрузки на сервере.

Я слышал о WebSockets, но мой текущий сервер находится на ColdFusion 8, поэтому (я думаю). Я удовлетворен тем, что каждый раз, когда вы чувствуете, что ajax не так элегантен и менее цивилизован, возраст.

В: Каким образом вы легко оживляете индикатор прогресса в twitter-bootstrap с 3,3% до 6,6%?

Ответ 1

Не анимация с помощью jQuery, предпочитайте анимацию CSS, если вам не нужно поддерживать старые браузеры.

Я сделал это копирование из стиля Bootstrap:

.bar {
  -webkit-transition: width 30.0s ease !important;
     -moz-transition: width 30.0s ease !important;
       -o-transition: width 30.0s ease !important;
          transition: width 30.0s ease !important;
}

Для столь длительного перехода я предлагаю вам попробовать разные анимации: http://www.the-art-of-web.com/css/timing-function/

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

  • Текст кнопки изменяется, когда начинается анимация и когда она заканчивается (просто для проверки времени анимации)
  • Проверьте, поддерживает ли браузер эту анимацию: вы можете использовать код jQuery как резервный режим

Дополнительные сведения об обнаружении поддержки CSS-анимации: https://developer.mozilla.org/en-US/docs/CSS/CSS_animations/Detecting_CSS_animation_support

Пример: http://jsfiddle.net/CUbgr/5/