Всем привет!
Помогите разобраться
изучаю книгу Дэвида Флэнагана, и дошел до темы событий. Что то очень тяжело она мне дается. Есть такой скрипт из книжки
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
// Следующие значения используются методом schedule(), определенным далее.
// Они используются как константы, но доступны для записи, поэтому вы можете
// переопределить эти значения, предлагаемые по умолчанию.
Tooltip.X_OFFSET = 25; // пикселов вправо от указателя мыши
Tooltip.Y_OFFSET = 15; // пикселов вниз от указателя мыши
Tooltip.DELAY = 50; // миллисекунд после события mouseover
/**
* Данный метод планирует появление всплывающей подсказки над указанным
* элементом через Tooltip.DELAY миллисекунд от момента события.
* Аргумент “e” должен быть объектом события mouseover. Данный метод извлекает
* координаты мыши из объекта события, преобразует их из оконных координат
* в координаты документа и добавляет вышеуказанные смещения.
* Определяет текст подсказки, обращаясь к атрибуту "tooltip" заданного
* элемента. Данный метод автоматически регистрирует обработчик события
* onmouseout и отменяет его регистрацию. Этот обработчик выполняет скрытие
* подсказки или отменяет ее запланированное появление.
*/
Tooltip.prototype.schedule = function(target, e) {
// Получить текст для отображения. Если текст отсутствует - ничего не делать.
var text = target.getAttribute("tooltip");
if (!text) return;
// Объект события хранит оконные координаты указателя мыши.
// Поэтому они преобразуются в координаты документа с помощью модуля Geometry.
var x = e.clientX + Geometry.getHorizontalScroll();
var y = e.clientY + Geometry.getVerticalScroll();
// Добавить смещения, чтобы подсказка появилась правее и ниже указателя мыши.
x += Tooltip.X_OFFSET;
y += Tooltip.Y_OFFSET;
// Запланировать появление подсказки.
var self = this; // Это необходимо для вложенных функций
var timer = window.setTimeout(function() { self.show(text, x, y); }, Tooltip.DELAY);
// Зарегистрировать обработчик onmouseout, чтобы скрыть подсказку
// или отменить появление запланированной подсказки.
if (target.addEventListener) target.addEventListener("mouseout", mouseout, false);
else if (target.attachEvent) target.attachEvent("onmouseout", mouseout);
else target.onmouseout = mouseout;
// Реализация слушателя события приводится далее
function mouseout() {
self.hide(); // Скрыть подсказку, если она уже на экране,
window.clearTimeout(timer); // отменить все запланированные подсказки
// и удалить себя, т.к. обработчик запускается единожды
if (target.removeEventListener)
target.removeEventListener("mouseout", mouseout, false);
else if (target.detachEvent)
target.detachEvent("onmouseout",mouseout);
else target.onmouseout = null;
}
}
// Определить единственный глобальный объект Tooltip для общего пользования
Tooltip.tooltip = new Tooltip();
/*
* Следующая статическая версия метода schedule() использует
* глобальный объект tooltip
* Используется метод следующим образом:
*
* <a href="www.davidflanagan.com" tooltip="good Java/JavaScript blog"
* onmouseover="Tooltip.schedule(this, event)">David Flanagan's blog</a>
*/
Tooltip.schedule = function(target, e) {Tooltip.tooltip.schedule(target, e); }
</script>
</head>
<body>
<a href="www.davidflanagan.com" tooltip="good Java/JavaScript blog"
onmouseover="Tooltip.schedule(this, event)">David Flanagan's blog</a>
</body>
Который не работает. Главное в самом начале скрипта выдает ошибку то что объект Tooltip не определен, так как зачем то мы определяем его свойства до определения самого объекта (Tooltip.X_OFFSET = 25).
Дальше вообще темный лес!