17.11.2022 10:13
Для взаимодействия с пользователем в объекте window определен ряд методов, которые позволяют создавать диалоговые окна. Работу с окнами мы рассмотрим на примерах.
Пусть у нас имеется страница, на которой расположены кнопки с названиями автомобилей и мы хотим, чтобы по щелчку по кнопке открывалось окно с картинкой этого автомобиля.
Код html-страницы будет следующим:
<html>
<head>
<title>javascript окно</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<form name="forma13">
<input type="button" value="ford" onClick="open_ford()">
<input type="button" value="mazda" onClick="open_mazda()">
<input type="button" value="volvo" onClick="open_volvo()">
</form>
</body>
</html>
Теперь нам надо создать три страницы с изображениями автомобилей (ford.html, mazda.html, volvo.html), которые собственно и будут загружаться в новые окна.
Код страницы ford.html будет следующим:
<html>
<head>
<title>javascript окно</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<img src="images/ford.jpg" width="300">
<input type="button" value="Закрыть" onClick="close_pict()">
</body>
</html>
Создайте аналогично две другие страницы самостоятельно (и не забудьте поместить в папку images соответствующие картинки).
В наших функциях мы будем использовать два метода объекта window - open() и close(). Первый создает новое окно, второй - закрывает его.
На странице script.js напишем код функций, а затем разберем его:
function open_ford() {
ford=window.open("ford.html", "display_ford",
"width=400,height=300,status=no,toolbar=no,menubar=no");
}
function open_mazda() {
mazda=window.open("mazda.html", "display_mazda"
"width=400,height=300,status=no,toolbar=no,menubar=no");
}
function open_volvo() {
volvo=window.open("volvo.html", "display_volvo"
"width=400,height=300,status=no,toolbar=no,menubar=no");
}
function close_pict() {
window.close();
}
Давайте посмотрим, что мы написали. В первых трех функциях идут строки вида:
=window.open("ford.html", "display_ford", "width=400,height=300,status=no,toolbar=no,menubar=no");
Эта строка создает новое окно с помощью метода open() объекта window (вы же помните, что методы отделяются точкой) и записывает в него страницу ford.html.
У этого метода существует три параметра, каждый из которых заключается в кавычки:
- первый параметр указывает страницу, которую нужно загрузить в окно (например, ford.html),
- второй параметр задает имя открываемому окну (в нашем примере display_ford),
- третий параметр позволяет нам управлять процессом создания окна. Здесь можно задать размеры окна, указать, должно ли новое окно иметь строку статуса, панель инструментов или меню. В нашем примере, мы создали окно шириной 400 и высотой 300 пикселов, без строки статуса, панели инструментов и меню. А могли бы вместо no написать yes и тогда все бы это появилось в нашем окне.
Здесь же можно указать ряд других параметров:
-l ocation выводить строку URL
- scrollbars добавлять линейку прокрутки, если документ не помещается на экране
- resize позволять пользователю изменять размер окна
Если какие-либо параметры опущены (в нашем примере, это три только что перечисленных), то из значение приравнивается к no. Обратите внимание, что все параметры перечисляются через запятую, НО БЕЗ ПРОБЕЛА!
В последней функции, мы использовали метод close(), который закрывает текущее окно.
Запустите код из примера, должно получиться следующее:
У объекта window, кроме методов open() и close(), как вы понимаете, есть и другие. Давайте посмотрим, какие еще полезные методы есть у этого объекта:
Метод alert
Функция alert() предназначена для вывода в браузере предупреждающего модального диалогового окна с некоторым сообщением и кнопкой «ОК». При его появлении дальнейшее выполнение кода страницы прекращается до тех пор, пока пользователь не закроет это окно. Кроме этого, оно также блокирует возможность взаимодействия пользователя с остальной частью страницы. Применение этого окна в основном используется для вывода некоторых данных при изучении языка JavaScript, в реальных проектах команда alert() не используется.
Синтаксис метода alert():
// message - текст сообщения
alert(message);
Метод alert() имеет один аргумент (message) - текст сообщения, которое необходимо вывести в модальном диалоговом окне. В качестве результата alert() ничего не возвращает.
Например, выведем при клике в диалоговое окно alert координаты курсора:
// es6
document.addEventListener('click', (e) => {
alert(`Координаты: (${e.clientX},${e.clientY})`);
});
// es5
document.addEventListener('click', function (e) {
alert('Координаты: (' + e.clientX + ',' + e.clientY + ')');
});
Если alert сообщение нужно вывести на нескольких строках, то в этом случае следует воспользоваться «символом перевода строки», который в JavaScript записывается как \n:
// перенос строки в alert
alert('Строка 1\nСтрока 2');
Метод confirm
Показывает диалоговое окно с указанным сообщением и кнопками "OK" и "Cancel". Сообщение должно побуждать пользователя принять решение. Подтверждение возвращает методу true, если пользователь выбирает "OK" или false если пользователь выбирает "Cancel".
Синтаксис:
confirm ("сообщение")
Пример:
Пусть у нас есть какая-нибудь кнопка "Открыть окно" и мы хотим, чтобы по щелчку по ней появлялось диалоговое окно, позволяющее уточнить действительно ли мы хотим его открыть (для примера пусть открывается окно с изображением Volvo из предыдущего примера).
Код html-страницы для этого примера прост:
<html>
<head>
<title>javascript окно</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<form name="forma14">
<input type="button" value="Открыть окно" onClick="choiceOf();">
</form>
</body>
</html>
На странице script.js напишем код функции choiceOf():
function choiceOf(){
if (confirm("Вы действительно хотите открыть окно?")) {
volvo=window.open("volvo.html", "display_volvo",
"width=400,height=300,status=no,toolbar=no,menubar=no");
}
}
Как видите, теперь окно с картинкой открывается только в том случае, если мы выбрали "OK" в диалоговом окне.
Т.е. в функции мы указали, что окно следует открывать только в случае, если пользователь в диалоговом окне выбрал "OK" (т.е. метод вернул истину (true)).
Хотелось бы пояснить один нюанс, в программировании в условии оператора if, если метод возвращает либо истину (true), либо ложь (false), часть ==true опускается. Иными словами вместо:
(confirm("Вы действительно хотите открыть окно?")==true)
пишется:
(confirm("Вы действительно хотите открыть окно?"))
Метод prompt
Этот метод отображает диалоговое окно ввода пользователя.
Синтаксис:
prompt(сообщение, [значение по умолчанию])
где
[] - означают, что параметр необязателен, т.е. его можно опустить.
Рассмотрим это на примере. Мы хотим, чтобы пользователь ввел свое имя в диалоговом окне, после чего мы поздороваемся с ним по имени.
Пример:
Итак, код html-страницы как всегда прост:
<html>
<head>
<title>javascript окно</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<form name="forma15">
<input type="button" value="Давай знакомиться!" onClick="acquaintance()">
</form>
</body>
</html>
Впрочем, код функции тоже несложен:
function acquaintance(){
var YouName=prompt("Как тебя зовут?", "Напиши здесь свое имя.");
alert("Привет "+YouName);
}
Как видите, здесь мы использовали два метода объекта window: сначала метод prompt, который вернул введенное пользователем имя в переменную YouName, а затем - метод alert, который отобразил окно сообщений, в котором мы и поздоровались с пользователем по имени.
Метод setTimeout
Этот метод делает что-либо по истечении указанного в миллисекундах промежутка времени.
Синтаксис:
setTimeout (что делать, время в миллисекундах)
Пример:
Пусть при нажатии на некоторую кнопку "Можно начинать?", через 3 секунды появляется окно сообщений с текстом "Начинайте!".
Итак, код html-страницы:
<html>
<head>
<title>javascript окно</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<form name="forma16">
<input type="button" value="Можно начинать?" onClick="setTimeout('startMessage()',3000)">
</form>
</body>
</html>
Да, именно здесь мы и применим этот метод. Так мы укажем, что функция startMessage() должна сработать через 3 секунды.
Код самой функции прост:
function startMessage(){
alert("Начинайте!")
}
Для того, чтобы отключить задержку таймера, установленную с помощью метода setTimeout используется следующий метод объекта window:
Метод clearTimeout
Этот метод отключает таймер, установленный при помощи метода setTimeout.
Синтаксис:
clearTimeout (timerID)
где
timerID - уникальный идентификатор таймера, полученный при его установке.
Давайте немножно переделаем наш последний пример, а именно сделаем две кнопки "Можно начинать?" и "Отменить вопрос".
Теперь, если нажать на кнопку "Можно начинать?", а затем, не дожидаясь появления окна сообщений, нажать на кнопку "Отменить вопрос", то окно сообщений не появится вовсе.
При этом мы изменили только html-код страницы на следующий:
<html>
<head>
<title>javascript окно</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<form name="forma17">
<input type="button" value="Можно начинать?" onClick="timer1=setTimeout('startMessage()',3000)">
<input type="button" value="Отменить вопрос" onClick="clearTimeout(timer1)">
</form>
</body>
</html>
Обратите внимание, что действие метода setTimeout происходит однократно. Если же мы хотим, чтобы какое-либо событие повторялось через определенные промежутки времени, то нам понадобится следующий метод:
Метод setInterval
В отличие от setTimeout, этот метод выполняет код много раз, через равные промежутки времени, пока не будет остановлен при помощи метода clearInterval.
Синтаксис:
timerID=setInterval(что делать, время в миллисекундах)
где
timerID - уникальный идентификатор таймера, полученный при его установке.
Давайте применим этот метод к предыдущему примеру:
<html>
<head>
<title>javascript окно</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<form name="forma18">
<input type="button" value="Можно начинать?" onClick="timer2=setInterval('startMessage()',3000)">
<input type="button" value="Я понял!" onClick="clearInterval(timer2)">
</form>
</body>
</html>
Теперь посмотрите, как это работает (прежде, чем нажимать на кнопку "Я понял", убедитесь, что окно сообщений открывается каждые 3 секунды):
Таким образом, мы рассмотрели методы объекта Window, надеюсь они вам пригодятся в вашей работе. Конечно, мы не рассмотрели все возможности этого языка, но как показывает практика, этого и не нужно. Все самое необходимое мы узнали, вы вполне в состоянии писать сценарии на этом языке.