ОБЬЯВЛЯЕТСЯ КОНКУРС НА САМЫЙ ЛУЧШИЙ ТАЙМЕР
ВНИМАНИЕ ВНИМАНИЕ!!! ОБЪЯВЛЯЕТСЯ КОНКУРС НА САМЫЙ ЛУЧШИЙ ОБРАТНЫЙ ТАЙМЕР, ПОБЕДИТЕЛЬ ПОЛУЧИТ 10WMZ ИЛИ 300ЯД
КРИТЕРИИ: 1) в GO должен быть максимум один обьект. 2) возможность задавать много таймеров и управлять ими раздельно 3) возможность управлять группой таймеров одновременно 4) возможность просмотреть текущее значение таймера в любое время 5) остановка, приостановка, перезапуск 6) возможность вызвать калбак по истечении таймера 7) возможность генерировать событие onTimerOver по истечению таймера. 8) таймер должен уметь показывать прошедшее время и оставшееся я сам тоже участвую в конкурсе и если выиграю, то ни чего не получу) |
Как не получишь? Ты сэкономишь
|
Цитата:
|
Цитата:
Цитата:
|
melky, я понял как global object. Только зачем оно надо :) Половина из описанного выше реализовано в соседней теме - Обратный таймер
|
Цитата:
да нативные, чтобы обычные пользователи могли посмотреть сколько на текущем таймере времени прошло и сколько осталось в одно слово. у меня это в данный момент планируется так: timer("timerID").passed() - тут сколько прошло в этом таймере. timer("timerID").remained() - тут сколько осталось в этом таймере. |
Цитата:
|
Цитата:
|
Цитата:
|
Livanderiaamarum, таймеры повсюду... :haha: Пиши, пиши. :yes: Будет что детям потом передать...
|
работает очень просто:
хотите создать таймер? пишите timer(время, калбак, пеоердичность_калбака), периодичность можно не писать, по дефолту 1 секунда создаст анонимный таймер который доступен по номеру создания, начиная с нулевого в данном случае так timer(0) калбак принимает 2 аргумента, сколько времени осталось и сколько времени прошло. можно создавать именованные таймеры timer(имя, время, калбак, пеоердичность_калбака) именованные таймеры доступны как timer('имя') время можно задавать как в миллисекундах так и массивом в порядке [секунды, минуты, часы] . если нужны только секунды, то часы и минуты можно не писать. и.т.п. таймеры имеют методы .stop() //приостановка и .start() //продолжение с текущего места расширять можно через интерфейс timer.fx например: timer.fx.MyFunctionName = function(){ бла бла бла} , где таймер доступен как this function timer (name_, time_, call_, every_, after_){ //ссылка на таймер var timer = arguments.callee, thisTimer, intervalId, name, time, call, every // timer.timers [] - таймеры // timer.fx {} функции таймеров switch (typeof arguments[0]) { //если первым аргументом передан обьект case 'object': log('object') break case 'string': //если не передано ни чего кроме строки if(arguments.length == 1) { //вернуть таймер по имени return timer.timers[arguments[0]] } else{ //иначе использовать её как идентефикатор таймера name = arguments[0] //если второй аргумент массив if(arguments[1] instanceof Array) { var timeArr = arguments[1], s = timeArr[0], m = timeArr[1] || 0, h = timeArr[2] || 0 time = (h*3600 + m+60 + s) * 1000 } else { time = arguments[1] } call = arguments[2] || function(){} every = arguments[3] || 1000 //сохранить id и запустить интервал каллера intervalId = setInterval(function(){ //обновить значения таймера thisTimer.update() //вызвать калбак (осталось, прошло) call(thisTimer.last, thisTimer.passed) }, every) //создать таймер thisTimer = { startTime : (new Date()).getTime(), //время когда был запущен таймер time : time, //на сколько установлен таймер last : time, //осталось passed : 0, //прошло call : call, //функция которая будет вызываться каждые сколько нсколько миллисекунд every : every, //вызывать калбак каждые... intervalId : intervalId, //id интервала калбака __proto__ : timer.fx //методы таймеров } //добавить таймер в список таймеров под именем таймеров timer.timers[name] = thisTimer } break case 'array': log('array') break case 'number': //если не передано ни чего кроме числа if(arguments.length == 1) { //вернуть таймер по номеру return timer.timers[arguments[0]] } time = arguments[0] call = arguments[1] || function(){} every = arguments[2] || 1000 //сохранить id и запустить интервал каллера intervalId = setInterval(function(){ //обновить значения таймера thisTimer.update() //вызвать калбак (осталось, прошло) call(thisTimer.last, thisTimer.passed) }, every) //создать таймер thisTimer = { startTime : (new Date()).getTime(), //время когда был запущен таймер time : time, //на сколько установлен таймер last : time, //осталось passed : 0, //прошло call : call, //функция которая будет вызываться каждые сколько нсколько миллисекунд every : every, //вызывать калбак каждые... intervalId : intervalId, //id интервала калбака __proto__ : timer.fx //методы таймеров } //добавить таймер в список таймеров timer.timers.push(thisTimer) } } timer.timers = [] timer.fx = { //обновить значение таймера update : function(){ this.last = this.time - ((new Date()).getTime() - this.startTime) //осталось this.passed = this.time - this.last //прошло }, //остановить таймер stop : function(){ //остановить калбак clearInterval(this.intervalId) }, //продолжить таймер start : function(){ //ссылка на текйщий таймер var thisTimer = this; //время запуска this.startTime = (new Date).getTime() - this.passed thisTimer.intervalId = setInterval(function(){ //обновить значения таймера thisTimer.update() //вызвать калбак (осталось, прошло) thisTimer.call(thisTimer.last, thisTimer.passed) }, thisTimer.every) } } timer('myTimer' ,[0,1], function(l,q){ log(l) }) timer('myTimer').stop() timer('myTimer').start() |
в данный момент наполняю таймеры методами через timer.fx
и пишу движок таймер-селекторов. и естественно пространства имен, куда же без них;) так же думаю запилить иерархию таймеров) дочерние таймеры смогут приостанавливать родительские, и пораждать в свою очередь дочерние относительно себя. в будущем планитуется сделать стек выполняющихся таймеров. точнее массив стеков. так как несколько таймеров могут выполняться одновременно. так же нужно прорабоатать систему адресации таймеров в двумерном стеке.. чтобы они могли прыгать с одного места на другое. нудно додумать иерархичность таймеров, сайчас они равны.и приоритет имеют те которые обьявленны раньше. надо это исправить. планируется перекупить несколько специалистов с разработки jQuery / так как у них неплохой опыт в разработке крупных проектов). |
Цитата:
|
Цитата:
)))) |
Livanderiaamarum, можно подумать, на них кто-то посягал...
|
Скажу одно: для нормального быстродейстия все таймеры должны выполняться одним единственным setTimeout'ом(ни в коем случае не setInterval'ом). Всё остальное - ваше дело.
|
Цитата:
timer.update() для нужного таймера. дело в том что у калбаков могут быть задано разное время. например кто-то захочет вызывать калбак не раз в секунду. как по дефолту,а чаще или реже.... но я с вами согласен, сделаю массив таймеров в которых не указали ИНОЕ от секунды время калбаков, и буду его вызывать одним сеттаймаутом. так и собирался просто пока ядро пишу. |
Livanderiaamarum, иди поработай, что ли. А то ты скоро ось для таймера напишешь.
Таймовс) |
Цитата:
|
Цитата:
Я тогда логотипом могу посоветовать взять "текущие" часы Дали) Или надкушенные... |
Цитата:
|
Цитата:
|
Цитата:
дело в том, что время у таймеров не одно. такое легко прокатывает в анимировании - каждые 10мс (для поддержания фпс) проходиться по всем элементам анимирования выставлять им свойства. всё просто. но тут такое не прокатывает. так как время у таймеров разное - к примеру,у одного 300мс, у второго - 350мс. получается, что "главный таймер" (тот, что один) должен вызываться каждые 0 < x < 50мс(причем, x % 5 == 0) для того, чтобы попасть в таймер с 300мс и в таймер с 350 мс. а что этот таймер будет делать во время того времени (к примеру, в 50,100,150мс после своего запуска), как он простаивает? вызываться каждые 50мс опять и проверять, нужен ли он кому? этот последний абзац - брешь в стене производительности. пустой перевод процессорного времени. на двух таймерах этого не будет заметно, но в масштабах проекта (куча таймеров) это может выдать результат в виде тормозов или повышенной загруженности ЦП. как же это можно исправить? *ехидно хихикает*. не сказать чтобы я решил этот вопрос, но какие-то задатки есть :). Цитата:
|
Цитата:
|
Цитата:
|
Тут вот в чем дело, таймеры обновляются перед вызовами калбаков функцией .update() для каждого таймера. Нужно смотреть этой функцией сколько времени таймеру осталось до нуля. и если время меньше чем то через которое произойдет следующий update, то нужно поставить таймаут на это время и по его истечении остановить таймер выполнив функцию delete() и после выполнить калбак(передав в него 0 осталось, и X прошло), и выполнить функцию end() которая означает действие по исчетечении таймера.
_____ ДАЖЕ если человек укажет переодичность калбаков, а соотсветственно апдейтов 200 лет, а таймер поставит на 10 секунд то первый апдейт в любом случае срабатывает при запуске таймера)) ^__^ |
Livanderiaamarum,
у меня только один вопрос-а нахрена это нужно всем и тебе в частности,по твоему мнению? у тебя опять приступ тщеславия? хочешь повторить путь Solovei95? дак посмотри до чего это его довело;) |
Цитата:
|
Цитата:
|
Цитата:
devote, а толку? не думаю что там найдутся поклонники его таланта:) |
Цитата:
Цитата:
Цитата:
надеюсь, конкурс ещё не закончен. жди. мой скриптяга на подходе ) 419 строк, с комментариями. писал код с нацеливанием на сжатие в GCC в режиме Advanced Mode. и пишется с другим подходом, нежели у тебя. писать таймер, у которого есть методы и свойства, без ООП - имхо, плохо. |
Цитата:
|
http://dev.odessite.com.ua/ag/stopwatch/ — не так давно сделал самый удобный онлайн таймер, который можно найти в сети :D
|
Цитата:
БОЛЬШЕ ЧЕМ У МЕНЯ)??:) ну у меня плагины писать можно как минимум)) и генерировать события)) (что я щас и делаю) а что за возможности у тебя такие каких у меня нет)? кстати не понял в чем понт отсутствия ООП? ) с ООП проще же вроде, не? |
Цитата:
генерировать события... subscribe pattern (шаблон "подписчик") ? Цитата:
Цитата:
|
Поднял тему :D :D :D :D :D :D
|
Цитата:
|
:lol:
|
melky,
Иерархия таймеров :D |
Зачем удалили мои посты?? Н усерьезно, хотя бы скажи те кто чтобы я знал на кого зло держать ><
|
Часовой пояс GMT +3, время: 23:05. |