Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   скрипт всплывающей подсказки (https://javascript.ru/forum/events/22870-skript-vsplyvayushhejj-podskazki.html)

kent666 03.11.2011 17:59

скрипт всплывающей подсказки
 
Всем привет!
Помогите разобраться :)
изучаю книгу Дэвида Флэнагана, и дошел до темы событий. Что то очень тяжело она мне дается. Есть такой скрипт из книжки
<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).
Дальше вообще темный лес!


Часовой пояс GMT +3, время: 11:07.