События таймера
Автор: Артемьев Сергей Игоревич ICQ: 438856621 email: _spin_@bk.ru |
Одно из замечательных свойств JavaScript - возможность запланировать выполнение произволного кода по истечении заданного интервала времени. Делается это очень просто. Сначала описывается функция, содержащая необходимый код, а затем устанавливается таймер на нужный интервал времени. По истечении этого интервала код будет выполнен автоматически без участия пользователя.
Таймер устанавливается программно при помощи методов setTimeout() или setInterval() объекта window.
<script type="text/javascript" language="javascript"> function runOnce() { alert('single alert'); } function runMultiple() { alert('повторяющееся сообщение'); } // интервал времени задаётся в милисекундах, // т.е. значение 3000 соответствует 3 секундам var timerOnce = window.setTimeout("runOnce();", 1000); var timerMulti = window.setInterval("runMultiple();", 4000); </script>
При помощи setTimeout() можно эмулировать поведение функции setInterval(). Для этого необходимо на каждой итерации заново запускать таймер:
<script type="text/javascript" language="javascript"> function runOnce() { alert('single alert'); window.setTimeout("runOnce();", 3000); } var timerOnce = window.setTimeout("runOnce();", 3000); </script>
Если таймер больше не нужен - его можно отключить при помощи методов clearTimeout() или clearInterval(). Обе функции имеют одинаковый синтаксис и в качестве параметра принимают ссылку на таймер.
<script type="text/javascript" language="javascript"> var timerMulti; function runMultiple() { if(условие_истинно) { // делаем какие-то действия } else window.clearTimeout(timerMulti); } timerMulti = window.setTimeout("runMultiple();", 5000); </script>
Таймеры очень часто используются для предупреждения пользователя о перенаправлении пользователя на новую страницу. Я думаю, вы не раз видели на сайтах надпись "Вы будете перенаправлены на какую-то-страницу через Х секунд" и вместо "Х" - обратный отсчёт секунд.
При помощи таймера такой приём реализуется очень просто, хотя есть возможность сделать это и средствами мета-тегов, но уже без счётчика оставшихся секунд.
<html> <head> <title>Страница перенаправления</title> <script type="text/javascript" language="javascript"> // выставляем длительность ожидания в секундах var secCount = 10; function checkExpiration() { if(secCount != 0) { // если счётчик ещё не обнулился - // уменьшаем его и снова взводим таймер secCount -= 1; document.getElementbyId("counter").innerHTML = secCount + " "; window.setTimeout("checkExpiration()", 1000); } else { // счётчик обнулился и можно // перенаправить страницу document.location = "target.htm"; } } </script> </head> <body onload="window.setTimeout('checkExpiration()', 1000);"> страница будет перезагружена через <span id="counter"> <!-- записываем начальное значение счётчика --> <script type="text/javascript" language="javascript"> document.write(secCount); </script> </span> секунд </body> </html>
Как показывает практика, практически ни один сайт не обходится без таймеров. Часы, летающий или ползающий текст, простая анимация и редиректы - все они основаны на собятиях таймера.
Напоследок стоит отметить, что интервал хоть и задаётся в милисекундах, но точность срабатывания не гарантируется. Погрешность зависит от используемого браузера, мощности компьютера, текущей загрузки процессора и многих других параметров. Обычный человек как правило не замечает задержек, но при выполнения сложных замеров опираться на таймер не стоит.