Руководство пользователя

динамической программной среды «Математический конструктор»

Руководство пользователя > Скриптовый язык

События и их обработчики

В ответ на действия пользователя или поведение самой программы с объектами чертежа могут происходить следующие события:

Событие Когда и с кем происходит
load Происходит с чертежом сразу после его загрузки из файла.
unload Происходит с чертежом в момент его уничтожения в памяти.
change Происходит с любым объектом при изменении любого из его свойств (местоположения, численного значения, внешнего вида и т.д.).
click Происходит с любым объектом при щелчке по нему мышью.
mouseDown Происходит с любым объектом при нажатии на нём кнопки мыши.
mouseUp Происходит с любым объектом при отпускании на нём кнопки мыши.
mouseMove Происходит с любым объектом при передвижении мыши над объектом.
mouseDrag Происходит с любым объектом при перетаскивании его мышью.
mouseOver Происходит с любым объектом в момент попадания мыши на объект.
mouseOut Происходит с любым объектом в момент выхода мыши за границы объекта.
keyType Происходит с полем ввода при нажатии и отпускании любой символьной клавиши.
keyDown Происходит с полем ввода при нажатии любой клавиши.
keyUp Происходит с полем ввода при отпускании любой клавиши.
focus Происходит с любым объектом в момент получения фокуса.
blur Происходит с любым объектом в момент потери фокуса.
action Происходит с кнопкой в момент нажатия.

При наступлении любого из перечисленных событий вслед за стандартной реакцией, предусмотренной в системе (например, выделением объекта по событию click), может быть вызвана любая функция на JavaScript, специально написанная для этого пользователем, – обработчик события.

Чтобы «прикрепить» обработчик к нужному объекту и событию, нужно вызвать специальный метод объекта addEventListener (переводится как добавить слушателя события), в который необходимо передать название события и ссылку на функцию-обработчик.

Например: у нас есть функция checkResult(), которую мы хотим вызывать всякий раз, когда пользователь щёлкает по кнопке B. Для этого необходимо выполнить

В.addEventListener("click", checkResult);

или

В.addEventListener("action", checkResult);

Обратите внимание, что название события заключается в кавычки, а после имени обработчика скобки не ставятся. Важный вопрос: в какой момент и в каком месте выполнить одну из указанных выше команд?

Вариант 1: записать это в скрипт для какой-нибудь кнопки C; туда же поместить описание функции checkResult(). Его недостаток в том, что пока пользователь не нажал кнопку C, обработчик не работает (не «прослушивает» нужное событие).

Вариант 2: записать это в скрипт для листа; туда же поместить описание функции checkResult(). Тогда обработчик включится сразу, в момент загрузки листа. Но здесь нас подстерегает неприятность: на момент выполнения скрипта на листе еще нет никаких объектов, а значит, и нашей кнопки B. При загрузке листа скрипт выдаёт ошибку «Ссылка на несуществующий объект».

Но выход всё же есть. Запишем в скрипт листа следующий код:

addEventListener("load",init);
function init () {
B.addEventListener("click",checkResult);
}
function checkResult() {

}

Теперь в момент загрузки листа вызывается только метод листа, который устанавливает слушателя для события load, а уже после загрузки, когда все объекты на лиcте появятся и с листом произойдёт load, к кнопке B будет прикреплён обработчик события click. То же самое можно сделать несколько компактнее, если описать функцию-слушатель прямо при вызове addEventListener (в JavaScript допускаются такие неименованные функции):

addEventListener("load", function () {
B.addEventListener("click",checkResult);
});
function checkResult() {

}

В приведённом примере мы использовали в качестве обработчиков функции init() и checkResult() без параметров. Это можно делать, если в обработчике нас интересует лишь сам факт, что данное событие произошло, но не его параметры (например, какая именно кнопка мыши была нажата; где в этот момент находился курсор и т.д.). Если же эта информация важна для обработчика, то в него передается параметр E – ссылка на соответствующее событие. В зависимости от его типа можно узнать:

Имя свойства Значение свойства
E.target Объект, с которым произошло событие.
E.timeStamp Время, когда произошло событие.
E.button Какая именно кнопка мыши была нажата.
E.physicalX, E.physicalY Координаты мыши в экранной системе координат.
E.logicalX, E.logicalY Координаты мыши в системе координат фрейма.
E.altKey, E.shiftKey, E.ctrlKey Были ли нажаты соответствующие управляющие клавиши.
E.keyCode Код нажатой клавиши.
E.charCode Символ нажатой клавиши.
E.relatedTarget Объект, к которому ушел (или от которого пришел) фокус.

Например: пусть K – круг с центром в точке P. Тогда выполнение следующего кода позволяет при каждом щелчке по кругу увидеть расстояние до его центра:

K.addEventListener("mouseDown",distCenter);
function distCenter(e) {
dx = e.logicalX-getX(P);
dy = e.logicalY-getY(P);
alert(sqrt(dx*dx+dy*dy));
}


© ООО «1С-Паблишинг», 2007-2021
© ООО «Виртуальная лаборатория», 2009-2021