Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обратный таймер (https://javascript.ru/forum/misc/23957-obratnyjj-tajjmer.html)

kuzkuz 13.12.2011 12:55

Обратный таймер
 
Привет всем!
В javascript профан, нужна очень помощь.
Нужен скрипт таймера обратного отсчета(час, минута, секунда) с кнопкой пауза!
Облазил весь интернет ничего подходящего найти не смог!:help:

Livanderiaamarum 13.12.2011 13:01

вам как удобнее, водить в функцию время с которого начнется обратный отсчет таймера? или вводить в функцию дату до которой будет отсчитывать таймер)?

kuzkuz 13.12.2011 13:35

Цитата:

Сообщение от Livanderiaamarum (Сообщение 142452)
вам как удобнее, водить в функцию время с которого начнется обратный отсчет таймера? или ввоодить дату до которой будет отсчитывать таймер)?

Удобнее если время будет задаваться в самом скрипте а на экране будет виден только время и кнопка старт/пауза, т.е. первый раз запустил отсчет например 45 минут и далее пауза останавливает обратный отсчет и таже кнопка его возобновляет.

Livanderiaamarum 13.12.2011 13:46

Цитата:

Сообщение от kuzkuz (Сообщение 142458)
Удобнее если время будет задаваться в самом скрипте а на экране будет виден только время и кнопка старт/пауза, т.е. первый раз запустил отсчет например 45 минут и далее пауза останавливает обратный отсчет и таже кнопка его возобновляет.


ответь на вопрос?!

kuzkuz 13.12.2011 13:54

Цитата:

Сообщение от Livanderiaamarum (Сообщение 142459)
ответь на вопрос?!

Ой извиняюсь, время с которого начнется обратный отсчет таймера

Livanderiaamarum 13.12.2011 14:25

СУТЬ ТАКОВА)!
есть обьект timer в него передается 2 аргумента
1) время которое нужно отсчитывать
2) функция которая будет выполняться каждую секунду

timer(время, функция);


время передается массивом, часы минуты секунды

[1,15, 42] 1 час 15 минут 42 секунды.

[0,0,10] 0 часов 0 минут 10 секунд.

timer([0,0,10], функция)

в нашу функцию будут передаваться 3 параметра, часы минуты и секунды обратного отсчета. и их можно естественно использовать внутри её.

то есть нужно писать так

timer([0,0,10] , function(часы, минуты, секунды) { alert(часы) } )


обьект timer имеет методы pause() и start()

просто нужно написать

timer.pause() // приостановка
timer.start() // запуск с приостановленного места






function timer(_time, _call){
			timer.lastCall = _call
			timer.lastTime = _time
			timer.timerInterval = setInterval(function(){
						_call(_time[0],_time[1],_time[2]);
						_time[2]--
						if(_time[0]==0 && _time[1]==0 && _time[2]==0){
									timer.pause()
									_call(0,0,0);
						}
						if(_time[2]==0){
									_time[2] = 59
									_time[1]--
									if(_time[1]==0){
												_time[1] = 59
												_time[0]--
									}
						}
						timer.lastTime = _time
			}, 1000)
}
timer.pause = function(){
			clearInterval(timer.timerInterval)
}
timer.start = function(){
			timer(timer.lastTime, timer.lastCall)
}

//сверху мое, а тут уже ваше)
//тут мы начинаем таймер. передаем массив с временем и функцию которая будет вызываться каждую секунду
timer([0,0,7], function(h,m,s){
			alert(h + ':' +m + ':' +s) // алертнуть часы минуты и секунды
})

timer.pause()
timer.start()

kuzkuz 13.12.2011 14:42

Цитата:

Сообщение от Livanderiaamarum (Сообщение 142467)
СУТЬ ТАКОВА)!
есть обьект timer в него передается 2 аргумента
1) время которое нужно отсчитывать
2) функция которая будет выполняться каждую секунду

timer(время, функция);


время передается массивом, часы минуты секунды

[1,15, 42] 1 час 15 минут 42 секунды.

[0,0,10] 0 часов 0 минут 10 секунд.

timer([0,0,10], функция)

в нашу функцию будут передаваться 3 параметра, часы минуты и секунды обратного отсчета. и их можно естественно использовать внутри её.

то есть нужно писать так

timer([0,0,10] , function(часы, минуты, секунды) { alert(часы) } )


обьект timer имеет методы pause() и start()

просто нужно написать

timer.pause() // приостановка
timer.start() // запуск с приостановленного места






function timer(_time, _call){
			timer.lastCall = _call
			timer.lastTime = _time
			timer.timerInterval = setInterval(function(){
						_call(_time[0],_time[1],_time[2]);
						_time[2]--
						if(_time[0]==0 && _time[1]==0 && _time[2]==0){
									timer.pause()
									_call(0,0,0);
						}
						if(_time[2]==0){
									_time[2] = 59
									_time[1]--
									if(_time[1]==0){
												_time[1] = 59
												_time[0]--
									}
						}
						timer.lastTime = _time
			}, 1000)
}
timer.pause = function(){
			clearInterval(timer.timerInterval)
}
timer.start = function(){
			timer(timer.lastTime, timer.lastCall)
}

//сверху мое, а тут уже ваше)
//тут мы начинаем таймер. передаем массив с временем и функцию которая будет вызываться каждую секунду
timer([0,0,7], function(h,m,s){
			alert(h + ':' +m + ':' +s) // алертнуть часы минуты и секунды
})

timer.pause()
timer.start()

Отлично, спасибо ОГРОМНОЕ, в принципе все понятно!
Чтобы вывести время например в <input> Что мне необходимо сделать(ну или в div)

Для вывзова функции остановки и запуска таймера мне достаточно в свойстве кнопки указать <input onclick="timer.pause()" type="button" /> ?

nerv_ 13.12.2011 14:50

Тоже сделал вариант. В связи с чем вопрос: я задаю время в миллисекундах (30 сек), т.е. по идее должно отображаться только 30 сек. Откуда там 3 часа берется?)))

p.s.: с датой работаю буквально второй раз :)
<html>
	<head>
		<meta charset="utf-8">
		<style type="text/css">
		</style>
		<script type="text/javascript">
			var x = new Date().getTime() + 30000;

			function backTimer() {
				var j = document.getElementsByTagName('div')[0];
				var i = new Date().getTime();
				if(i < x) {
					j.innerHTML = new Date(x - i).toLocaleTimeString();
					setTimeout(backTimer, 500);
				} else {
					j.innerHTML = "00:00:00";
				}
			}
		</script>
	</head>
	<body onload="backTimer();">
		<div></div>
	</body>
</html>

Livanderiaamarum 13.12.2011 14:51

Цитата:

Сообщение от kuzkuz (Сообщение 142469)
Отлично, спасибо ОГРОМНОЕ, в принципе все понятно!
Чтобы вывести время например в <input> Что мне необходимо сделать(ну или в div)

Для вывзова функции остановки и запуска таймера мне достаточно в свойстве кнопки указать <input onclick="timer.pause()" type="button" /> ?

да) конечно) попробуйте все)) разберетесь)

timer([0,0,30], function(h,m,s){
   //вот тут время у тебя доступно как
   //h - часы
   //m - минуты
   //s - секунды
})

Nekromancer 13.12.2011 16:58

nerv_,
Потому, что у тебя видимо локальное время +3 стоит, у меня вот +4 и у меня 4 часа показываться)


Часовой пояс GMT +3, время: 09:20.