ОБЬЯВЛЯЕТСЯ КОНКУРС НА САМЫЙ ЛУЧШИЙ ТАЙМЕР
ВНИМАНИЕ ВНИМАНИЕ!!! ОБЪЯВЛЯЕТСЯ КОНКУРС НА САМЫЙ ЛУЧШИЙ ОБРАТНЫЙ ТАЙМЕР, ПОБЕДИТЕЛЬ ПОЛУЧИТ 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, время: 12:31. |