Метод window.close() позволяет закрыть некоторое окно браузера. Но только в этом "некотором" окне и содержится основная трудность использования данного метода. Программа на JavaScript должна знать, какое именно окно от нее требуют закрыть.
Для этих целей часто используется метод window.focus(), о котором мы поговорим чуть ниже.
Для закрытия окна браузера служит метод window.close(). Единственной сложностью при использовании этого метода является указание обработчику JS, какое именно окно следует закрыть. Если требуется закрыть текущее окно, то можно написать просто:
window.close(); или self.close();
Если нам потребуется закрыть порождающее (родительское окно), то есть окно из которого было вызвано текущее, то достаточно написать:
window.opener.close();
Но что, если нам требуется закрыть произвольное окно? Вполне естественным в этом случае будет получить идентификатор этого окна, для закрытия окна по его идентификатору при помощи window.close(), что мы и будем делать в следующем примере:
Аналогично примеру в предыдущем уроке, мы устанавливаем на кнопку формы обработчик события клика, который при нажатии вызывает метод window.open(), но с тем отличием, что в данном примере результат работы этого метода присваивается переменной okno.
Теперь переменная содержит необходимое нам окно и мы без труда можем его закрыть:
okno.close();
Теперь мы научились самостоятельно создавать и закрывать окна браузера при помощи JavaScript. Следующим шагом в освоении методов работы с окнами станет управление фокусом.
window.focus() - управление фокусом
Метод window.focus() позволяет выбрать одно из многих существующих в данный момент окон браузера, для проведения над ним определенных манипуляций.
Для выбора определенного окна из нескольких существующих используется метод window.focus(). Работа с этим методом аналогична работе с window.close() – главное передать идентификатор самого окна и дело в шляпе. Рассмотрим все на примере:
Хотя пример может показаться Вам несколько нагроможденным, ничего сложного тут нет.
Создаются две кнопки, позволяющие создать 2 различных окна посредством метода window.open(). И создаются еще 2 кнопки, позволяющие переключать фокус между ними.
Каждому окну назначен свой, уникальный идентификатор, позволяющий обращаться к каждому из них напрямую:
okno1 и okno2
При нажатии на кнопку выбрать окно1 вызывается метод window.focus() с идентификатором okno1:
okno1.focus();
Аналогично происходит и при нажатии на кнопку выбрать окно2.
window.setTimeout() - порождаем потоки вычислений
Метод window.setTimeout() позволяет порождать потоки вычислений через определенные интервалы времени.
Звучит несколько не понятно?
Не переживайте, в этом уроке мы подробно разберем данный метод, который является очень мощным JavaScript инструментом.
Метод window.setTimeout() является одним из наиболее мощных и полезных методов во всем JavaScript.
Принцип работы этого метода заключается в порождении нового потока вычислений через определенный интервал времени, заданный в миллисекундах. В общих чертах запись метода выглядит следующим образом:
a = setTimeout("поток_кода",время);
Не стоит переживать, если Вам пока не понятен данный метод. Далее все встанет на свои места.
Давайте теперь рассмотрим пример, который поможет нам лучше понять принцип работы метода window.SetTimeOut():
<script>
var mark=0;
var circle;
function time()
{
if(mark==1)
{
d = new Date();
window.document.c.f.value = d.getHours()+":"+d.getMinutes()+
":"+d.getSeconds();
}
circle=setTimeout("time();",500);
}
function marks()
{
if(mark==0)
mark=1;
else mark=0;
}
</script>
<FORM NAME=c>
Текущее время:
<INPUT NAME=f size=8>
<INPUT TYPE=button VALUE="старт/стоп" onClick="marks();time();">
</FORM>
Итак, рассмотрим нашу программу более подробно.
Программа состоит из 2-х функций, одна из которых ( time() ) порождает потоки времени, другая ( marks() ) отвечает за отображение времени на экране.
Функция time() проверяет значение переменной mark (значение которой, в свою очередь, может изменять функция marks() ) на равенство 1. Если она равна 1, то порождается поток времени при помощи функции date(). Но неважно, равна переменная mark 1 или не равна, в любом случае функция time() вызывает метод window.SetTimeOut() с параметрами:
setTimeout("time();",500);
То есть функция порождает себя заново с интервалом 500 мс, что позволяет ей всегда держать внутри переменной d свежее значение времени.
Функция marks() является простейшей функцией, единственной задачей которой является изменение значения переменной mark с 0 на 1 и наоборот при каждом вызове.
Далее мы создаем простую форму, состоящую из текстового поля и кнопки, содержащей обработчик события OnClick:
onClick="marks();time();"
Таким образом, нажимая на кнопку мы первым делом вызываем функцию marks(), которая изменяет значение mark, а за тем в бой идет основная функция – time(), которая и отвечает за вывод времени.
Нажав на кнопку повторно мы опять изменим значение mark, что повлияет на выполнение условия if внутри функции time(), показав или убрав время с экрана.
window.clearTimeout - обнуление внутреннего счетчика
Ну вот мы и научились порождать потоки вычислений при помощи метода window.setTimeout(). Разобрали пример, в котором время выводилось при помощи данного метода.
Но, даже когда мы останавливали вывод времени на экран, внутренний счетчик продолжал идти. Сегодня мы научимся его останавливать при помощи метода window.clearTimeout.
Для прерывания потока вычислений, созданного методом window.SetTimeout используется window.ClearTimeout. Смысл этого метода может показаться Вам несколько непонятным, но давайте вернемся к предыдущему примеру.
Если Вы помните, то мы выводили на экран текущее время при помощи функции date(). Функция date() позволяет узнать время только в один единственный момент времени – в момент вызова самой функции, но нам требовалось, чтобы время шло, как это и должно быть.
Для этого мы использовали метод window.settimeout, позволяющий нам многократно производить вызов функции date().
И все вроде бы нормально, но у нашей программы был один очень существенный нюанс. Когда мы нажимали на кнопку старт/стоп для остановки часов, мы всего навсего отменяли вывод времени на экран, но сами часы не останавливались. Потоки продолжали порождаться с задержкой в 500 мс, как это было бы, если бы мы и не нажимали на кнопку старт/стоп.
В нашем случае это не было существенной проблемой, ведь наша маленькая программка отнимала мизерное количество процессорного времени. Но в случаях, когда программы будут сложней и больше, такая небрежность может привести к торможению и даже полному зависанию системы.
Теперь Вы поняли необходимость использования метода window.clearTimeout. Перейдем к примеру:
<script>
var p1 = null;
function start()
{
d = new Date();
window.document.c1.f1.value = d.getHours()+":"+d.getMinutes()+
":"+d.getSeconds();
p1=setTimeout("start();",500);
}
function stop()
{
clearTimeout(p1);
p1=null;
}
</script> <FORM NAME=c1>
Настоящее время:
<INPUT NAME=f1 size=8>
<INPUT TYPE=button VALUE="Start" onClick="if(p1==null)start();">
<INPUT TYPE=button VALUE="Stop" onClick="if(p1!=null)stop();">
</FORM>
Созданная нами в этом примере программа является более грамотной, с точки зрения программирования на JavaScript, модификацией программы из предыдущего урока.
У нас есть две функции. Первая функция – start() – вызывает текущее время и заставляет его обновляться раз в 500 мс посредством метода window.settimeout.
Вторая функция – stop() – уничтожает порождение потоков строкой clearTimeout(p1); и присваивает переменной, содержащей поток вычисления (p1) значение null (не существует).
Помимо внедрения метода window.clearTimeout, управление программой тоже было существенно доработано.
При нажатии на кнопку старт происходит проверка условием if существует ли поток вычислений в данный момент времени и если его нет, то запускает функцию start().
При нажатии на кнопку стоп проверяется отсутствие потока вычислений и если он существует, то вызывается функция stop().
Такая доработка функционала позволяет нам исключить появление нескольких одинаковых потоков вычислений в один момент времени.
Новых за месяц: 130 Новых за неделю: 41 Новых вчера: 6 Новых сегодня: 3 Всего: 5499 Из них: Администраторов: 6 $$$-Модераторов: 2 Модераторов: 5 Прокураторов: 5 ----------------- далее: Проверенных: 260 Пользователей: 3034 Новичков: 1884 Заблокированных: 110 ----------------- Из всех пользователей: Мужчин и парней: 4322 Женщин и девушек: 1176