Перейти к содержанию

Задача для программиста


VG2

Рекомендуемые сообщения

Нужен web-счетчик каких-либо процессов. Всякие тайм каунтдауны широко распространены. А вот как продемонстрировать пример, допустим, сколько человек умирает на Земле? При этом в реальном времени крутятся цифры как на счетчике километража спидометра.

 

Вот сделал на джаве, но он должен считать независимо, с сервера, а не с момента загрузки страницы. И цифры должны крутиться не группами, а по одной и быстро.

Ссылка на комментарий
Поделиться на другие сайты

раздели задачу на подзадачи

входные данные

- меняются динамически на сервере

--пишутся в БД

--пишутся в файл

обработчик AJAX дергает данные и риал-тайм генерит динамический счетчик

Ссылка на комментарий
Поделиться на другие сайты

mr.Faster спасибо.

- меняются динамически на сервере

А как такое возможно?

Аякс для меня слишком сложен.

 

В принципе я нащупал решение, только не знаю как реализовать в коде на ДжавеСкрипт.

Вот этот скрипт нормально считает по одной цифре один раз в секунду. Параметр при этом у функции setTimeout = 1000

var g_iCount = 6500000;

function startCountdown(){
   if((g_iCount - 1) >= 0){
		   g_iCount = g_iCount + 1;
		   numberCountdown.innerText = g_iCount;
		   //
		   setTimeout('startCountdown()',1000);
   }
}

 

Теперь допустим мы хотим показать динамику рождения в каждую минуту 261 человека. Делим 261 на 60 получаем 4,35 человека в секунду. Но с этими параметрами, т. е. setTimeout('startCountdown()',435); счет идет ПРИБЛИЗИТЕЛЬНО в 2 раза медленнее. Ладно, делим на два и ставим параметр как 217.5 - все равно в минуту никак точно 261 человек не получается. Можете проверить. Не понимаю в чем загвоздка....

 

По поводу динамических изменений на сервере. Есть такая идея. Сначала в переменные заносятся для примера общее количество населения (скажем 6500000000), затем дата на которое эта цифра верна (например 12.11.2007 12:34) и наконец динамику изменений (в нашем случае +261 чел/мин) . После этого, идет код который вычисляет при загрузке странички разницу между текущей датой и датой в переменной, умножает на динамику, плюсует к переменной начального количества населения и выводит в виде скрипта указанного выше с нужной динамикой.

По идее это должно работать, но проверить пока не могу: не хватает знаний:(

Ссылка на комментарий
Поделиться на другие сайты

вот тебе привязка ко времени:

<script LANGUAGE="JavaScript">


var g_iCount = new Number();
var con_value = new Number();
var now3 = new Date();
var time_stamp = Date.UTC(2007, 11-1, 01, 00, 00, 00, 00);//месяц минус один
var cur_time_stamp=now3.getTime();
var con_value=((cur_time_stamp-time_stamp)/1000)*4;
var g_iCount = 6500000;
g_iCount=g_iCount+Math.ceil(con_value);
function startCountdown(){
   if((g_iCount - 1) >= 0){
		   g_iCount = g_iCount + 4,5;
		   numberCountdown.innerText = g_iCount;
		   setTimeout('startCountdown()',1000);
   }
}

</script>

Ссылка на комментарий
Поделиться на другие сайты

((cur_time_stamp-time_stamp)/1000)

количество прошедших секунд с 01,11,2007

умножаем на количество рожденных в секунду

*4;

 

округляем и прибавляем к начальном значению

 

хотя количество миллисекунд делить на 1000 наверное неправильно

Ссылка на комментарий
Поделиться на другие сайты

ну на 4,5 можешь умножить

Т. е. цифры будут меняться не по одной а группой в каждой по 4?

это по контексту столько в секунду выползает

Что значит "по контексту"? По поиску в сети что ли?

Ссылка на комментарий
Поделиться на другие сайты

4 человека в секунду рождается

на 1 ноября 2007 года уже родилось 6500000 человек

считаем количество секунд с 1 ноября по 24 ноября

умножаем на 4

за 24 дня столько то родилось

прибавляем начальное значение (на 1 ноября)

получаем значение родившихся по текущий момент

и твой вывод на странице (число изменяется на твой шаг 4,5)

Ссылка на комментарий
Поделиться на другие сайты

Все же странные вещи:)

 

в функции setTimeout('startCountdown()',1000);

если оставить параметр 1000 как есть, то рождаться будет по 1 человеку в секунду, что не верно.

 

Методом научного тыка (в прямом смысле засекал на секундомере 1 минуту и снимал показания со счетчика) выяснилось, что в 1 секунде действительно не 1000 миллисекунд, а 1024. Не понятно только почему везде указанно про 1 с = 1000 мс.

Поэтому, если рождается 261 чел. в мин., то 261/60*1024=4454.4 и затем нужно поделить на 20 для того чтобы получилось 222.72 при котором скрипт реально выдает 261 человека в минуту, т. е.:

setTimeout('startCountdown()',222.7);

 

Откуда взялось это 20 понять совершенно не могу:)

Ссылка на комментарий
Поделиться на другие сайты

jnc да я сам удивлен. Стал искать, вот например: http://www.google.ru/search?complete=1&amp...%D0%B4%D0%B5%3F

 

Там есть упоминания про 1024 сек. Если 1 сек = 1000 мсек, то получается полная белиберда при проверке скрипта. А так хоть точно получается. Не считая странной кратности 20-ти.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 weeks later...
С другой стороны, если оставить 1000 и засечь на секундомере, то тоже все верно получается.

Я кипю :bang:

 

 

Ты бы лучше гостевой занялся, админ хренов :angry::rolleyes: , а то нихрена не работает уже несколько дней

Ссылка на комментарий
Поделиться на другие сайты

Stef1997 ты бредишь. Вчера работала, сегодня тоже. И вообще, это тема для умныхлюдей. Пейсдуй в тему "Эмо... как им стать" это тебе ближе:)

 

Сорри за оффтоп. И Стефа необразованного простите тоже...

Ссылка на комментарий
Поделиться на другие сайты

  • 1 month later...

Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

×
×
  • Создать...