Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2016, 16:09   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию js easy timer

Надо написать с нуля таймер на чистом js.

Как вывести ms ?

Код:
  var timerId = setInterval(function () {
      console.log(timer.s++);  // s - seconds 
  },  1000);
Когда пишу такой код, вроде каждую секунду в консоль выводится и нормально работает.

А вот такой вот код выводит миллисекунды неправильно.

Код:
var timerId = setInterval(function () {
      console.log(timer.ms++);  // ms - milliseconds 
  },  1);
Я читал про задержку в браузере и т.д, но как мне выводить в точности ms? Есть же много таймеров где они нормально считаются
Praud вне форума Ответить с цитированием
Старый 18.03.2016, 16:19   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

https://developer.mozilla.org/en-US/...AnimationFrame
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.03.2016, 16:36   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Возможно, но на лекции мы узнали только про
setInterval и setTimeOut, должны использовать эти функции для построения таймера.
Должно что-то такое получиться.
http://www.online-stopwatch.com/full-screen-stopwatch/
Praud вне форума Ответить с цитированием
Старый 18.03.2016, 16:42   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

По ссылке флеш вообще.

Ну тогда может быть с помощью получения текущего времени самому (пытаться это делать каждую миллисекунду смысла естественно нет)
https://developer.mozilla.org/en-US/...jects/Date/now
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 18.03.2016 в 16:48.
Alex11223 вне форума Ответить с цитированием
Старый 18.03.2016, 16:45   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Я читал про задержку в браузере и т.д, но как мне выводить в точности ms?
никак. обычный таймер в Windows срабатывает 18 раз в секунду
меньший интервал времени, чем 1/18 обычным способом недостижим.
да и зачем это нужно, человеческий глаз не способен увидеть событие раз в 1/1000 секунды.

Вы про вывод точного значения миллисекунд сами придумали себе задачу или преподаватели глумятся?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2016, 17:02   #6
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
никак. обычный таймер в Windows срабатывает 18 раз в секунду
меньший интервал времени, чем 1/18 обычным способом недостижим.
да и зачем это нужно, человеческий глаз не способен увидеть событие раз в 1/1000 секунды.

Вы про вывод точного значения миллисекунд сами придумали себе задачу или преподаватели глумятся?
Сам придумал, мне просто нужен подобный результат как на флеше, используя примитив. Классы Date мы не изучали.
Praud вне форума Ответить с цитированием
Старый 18.03.2016, 17:03   #7
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

P.S вот второй пример уже не на флеше

http://stopwatch.onlineclock.net/new/
Praud вне форума Ответить с цитированием
Старый 18.03.2016, 17:11   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И что? Вам документацию читать запрещают? Беги оттуда.

По ссылке выше как раз Date и используют в таймере.

Ну если с 1000 устроила точность, то можно просто например 50 или 100 попробовать вместо 1.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.03.2016, 17:26   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Praud Посмотреть сообщение
P.S вот второй пример уже не на флеше

http://stopwatch.onlineclock.net/new/
так его и разберите.
там всё на чистом JS и сделано.
смотрите в модуле new-stopwatch.js

функция, которая вызывается по кнопке Start выглядит так:
Код:
var t = [0, 0, 0, 0, 0, 0, 0, 1];
var firstsplitflag = 0;
var splittime;
function stopstart() {
    t[t[2]] = (new Date()).valueOf();
    t[2] = 1 - t[2];
    if (0 == t[2]) {
        clearInterval(t[4]);
        t[3] += t[1] - t[0];
        document.getElementById("startstopbutton").value = "Start";
        document.getElementById('split').innerHTML += (t[7]++) + ' Stop: ' + format(t[1] - t[0]) + '<br>';
        t[4] = t[1] = t[0] = 0;
        disp();
        firstsplitflag = 0;
    } else {
        document.getElementById("startstopbutton").value = "Stop";
        t[4] = setInterval(disp, 43);
    }
}
обратите внимание, что SetInterval делается раз в 43 мс.
Вы это на экране успеваете увидеть?!

ну и остальные функции тоже вполне себе прозрачные:
Код:
function dosplit() {
    if (0 !== t[2]) 
    {
        document.getElementById('split').innerHTML += (t[7]++) + ' Split: ' + format(t[1] - t[0]) + '<br>';
    }
}
function reset_it() {
    if (t[2])
        stopstart();
    t[4] = t[3] = t[2] = t[1] = t[0] = 0;
    disp();
    document.getElementById('split').innerHTML = '';
    t[7] = 1;
}
function disp() {
    if (t[2])
        t[1] = (new Date()).valueOf();
    t[6].value = format(t[3] + t[1] - t[0]);
}
function format(ms) {
    var d = new Date(ms + t[5]).toString().replace(/.*([0-9][0-9]:[0-9][0-9]:[0-9][0-9]).*/, '$1');
    var x = String(ms % 1000);
    while (x.length < 3)
        x = '0' + x;
    d += '.' + x;
    return d;
}
function load() {
    t[5] = new Date(1970,1,1,0,0,0,0).valueOf();
    t[6] = document.getElementById('disp');
    disp();
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2016, 17:29   #10
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

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

Если я беру 50, он мне вообще в консоль выводит 20 чисел

Код:
  var timerId = setInterval(function () {
    timer.ms += 1;
    console.log(timer.ms);
  }, 50);

  setTimeout(function() {
     clearInterval(timerId);
  }, 1000);

}
Мне же нужно как в тех таймерах каждую мс записывать? А что там с Date.now? Какой принцип?
Praud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача easy! Shurik'en C# (си шарп) 1 11.06.2012 22:33
Easy code masm Zeraim Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 14.12.2011 07:22
реализация веб сервисов с использованием JBoss rest easy ОлькаЗара Помощь студентам 0 10.12.2010 01:50
не работает мышь easy-touch ET-105 RF OPTO evgeniy_xxx Компьютерное железо 0 16.12.2009 16:12