Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Фоновый отсчет по нажатию. (https://javascript.ru/forum/misc/15279-fonovyjj-otschet-po-nazhatiyu.html)

CaypoH 20.02.2011 11:05

Фоновый отсчет по нажатию.
 
Как сделать чтобы при нажатии на кнопку начался видимый отсчет времени например минуту отсчитывает ?

monolithed 20.02.2011 12:15

<script type="text/javascript">
window.onload = function(){
    document.getElementById('a').onclick = function(i) {
        return function() {
           document.body.innerHTML = --i > 0 ? i : 'Oops!';
           window.setTimeout(arguments.callee, 1000);
           return false;
        };
    }(60);
};
</script>
<a href="#" id="a">click</a>

Matre 20.02.2011 12:17

<span id='timer'>60</span>
<input type='button' onclick='start(); this.onclick = new Function;' value='начать отсчёт' />
<script type='text/javascript'>
	function start() {
		var t = document.getElementById("timer");
		setTimeout(function () {
			if (--t.innerHTML == 0)
				t.innerHTML = "Time is out!";
			else
				setTimeout(arguments.callee, 1000);
		}, 1000);
	}
</script>

Aetae 20.02.2011 12:20

Только это всё нифига не точно.)
Особенно если на странице работают тяжелые анимации или вкладка переключена.

monolithed 20.02.2011 12:20

Цитата:

Сообщение от Matre
this.onclick = new Function;

для чего это?;)


Цитата:

Сообщение от Aetae
Только это всё нифига не точно.)
Особенно если на странице работают тяжелые анимации или вкладка переключена.

есть иное предложение? :)

monolithed 20.02.2011 12:58

Кстати, если я не ошибаюсь в ES5 Strict mode исключили:
arguments.callee // TypeError 
arguments.caller // TypeError

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

Aetae 20.02.2011 13:00

С помощью Date стесно. Так хоть отображаться будет боль-мене точно.

Matre 20.02.2011 13:06

Цитата:

для чего это?
Чтобы при повторном нажатии таймеры не накладывались друг на друга.


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