Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 16.12.2011, 23:18
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

работает очень просто:

хотите создать таймер?
пишите 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()

Последний раз редактировалось Livanderiaamarum, 16.12.2011 в 23:25.
Ответить с цитированием
  #12 (permalink)  
Старый 16.12.2011, 23:27
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

в данный момент наполняю таймеры методами через timer.fx

и пишу движок таймер-селекторов. и естественно пространства имен, куда же без них

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

Последний раз редактировалось Livanderiaamarum, 16.12.2011 в 23:32.
Ответить с цитированием
  #13 (permalink)  
Старый 16.12.2011, 23:48
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от Livanderiaamarum
и пишу движок таймер-селекторов. и естественно пространства имен, куда же без них

так же думаю запилить иерархию таймеров)
дочерние таймеры смогут приостанавливать родительские, и пораждать в свою очередь дочерние относительно себя.
в будущем планитуется сделать стек выполняющихся таймеров. точнее массив стеков. так как несколько таймеров могут выполняться одновременно. так же нужно прорабоатать систему адресации таймеров в двумерном стеке.. чтобы они могли прыгать с одного места на другое. нудно додумать иерархичность таймеров, сайчас они равны.и приоритет имеют те которые обьявленны раньше. надо это исправить. планируется перекупить несколько специалистов с разработки jQuery / так как у них неплохой опыт в разработке крупных проектов).
Пиздец. Извините за мат)
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #14 (permalink)  
Старый 17.12.2011, 00:03
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от trikadin Посмотреть сообщение
Пиздец. Извините за мат)
300 рублей будут мои!!!!!!!111111

))))
Ответить с цитированием
  #15 (permalink)  
Старый 17.12.2011, 00:04
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Livanderiaamarum, можно подумать, на них кто-то посягал...
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #16 (permalink)  
Старый 17.12.2011, 00:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

Скажу одно: для нормального быстродейстия все таймеры должны выполняться одним единственным setTimeout'ом(ни в коем случае не setInterval'ом). Всё остальное - ваше дело.
__________________
29375, 35
Ответить с цитированием
  #17 (permalink)  
Старый 17.12.2011, 00:17
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от Aetae Посмотреть сообщение
Скажу одно: для нормального быстродейстия все таймеры должны выполняться одним единственным setTimeout'ом(ни в коем случае не setInterval'ом). Всё остальное - ваше дело.
таймеры не вполняются, выполняются калбаки. только перед калбаками выполняется
timer.update() для нужного таймера.

дело в том что у калбаков могут быть задано разное время. например кто-то захочет вызывать калбак не раз в секунду. как по дефолту,а чаще или реже....

но я с вами согласен, сделаю массив таймеров в которых не указали ИНОЕ от секунды время калбаков, и буду его вызывать одним сеттаймаутом.

так и собирался просто пока ядро пишу.
Ответить с цитированием
  #18 (permalink)  
Старый 17.12.2011, 00:19
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Livanderiaamarum, иди поработай, что ли. А то ты скоро ось для таймера напишешь.

Таймовс)
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #19 (permalink)  
Старый 17.12.2011, 00:20
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от trikadin Посмотреть сообщение
Livanderiaamarum, иди поработай, что ли. А то ты скоро ось для таймера напишешь.

Таймовс)
ну да, в планах облачный сервис таймеров) и серийное производство timerBook'ов )))
Ответить с цитированием
  #20 (permalink)  
Старый 17.12.2011, 00:22
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от Livanderiaamarum
ну да, в планах облачный сервис таймеров) и серийное производство timerBook'ов )))
timePhone.

Я тогда логотипом могу посоветовать взять "текущие" часы Дали) Или надкушенные...
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Самый лучший язык программирования nemo Оффтопик 141 13.10.2013 01:29
Обратный таймер kuzkuz Общие вопросы Javascript 47 16.12.2011 19:09