JavaScript. Подробное руководство, 6-е издание
Шрифт:
Важно отметить, что обработчики событий «mousemove» и «mouseup» регистрируются как перехватывающие обработчики. Это обусловлено тем, что пользователь может перемещать мышь быстрее, чем сможет перемещаться элемент документа, в результате чего некоторые события «mousemove» могут возникать за пределами буксируемого элемента. В фазе всплытия эти события просто не будут передаваться нужным обработчикам. В отличие от стандартной модели модель событий, реализованная в IE, не поддерживает фазу перехвата, но она поддерживает специализированный метод
setCapture,
Наконец, обратите внимание, что функции
moveHandler
и upHandler
определены внутри функции drag.
Благодаря тому, что они определены во вложенной области видимости, эти функции могут пользоваться аргументами и локальными переменными функции drag,
что существенно упрощает их реализацию. Пример 17.2. Буксировка элементов документа
/**
* Drag.js: буксировка абсолютно позиционированных HTML-элементов.
*
* Этот модуль определяет единственную функцию drag, которая должна вызываться
* из обработчика события onmousedown. Последующие события mousemove будут вызывать
* перемещение указанного элемента. Событие mouseup будет завершать буксировку.
* Эта реализация действует в обеих моделях событий, стандартной и IE.
* Использует функцию getScrollOffsets, представленную выше в книге.
*
* Аргументы:
*
* elementToDrag: элемент, принявший событие mousedown или содержащий его элемент.
* Этот элемент должен иметь абсолютное позиционирование. Значения его свойств style.left
* и style.top будут изменяться при перемещении указателя мыши пользователем.
*
* event: объект Event, полученный обработчиком события mousedown.
**/
function drag(elementToDrag, event) {
// Преобразовать начальные координаты указателя мыши в координаты документа
var scroll = getScrollOffsets: // Вспомогательная функция, объявленная
//
где-то в другом месте
var startX = event.clientX + scroll.x;
var startY = event.clientY + scroll.y;
// Первоначальные координаты (относительно начала документа) элемента, который
// будет перемещаться. Так как elementToDrag имеет абсолютное позиционирование,
// предполагается, что его свойство offsetParent ссылается на тело документа,
var origX = elementToDrag.offsetLeft;
var origY = elementToDrag.offsetTop;
// Найти расстояние между точкой события mousedown и верхним левым углом элемента.
// Это расстояние будет учитываться при перемещении указателя мыши,
var deltaX = startX - origX;
var deltaY = startY - origY;
// Зарегистрировать обработчики событий mousemove и mouseup,
// которые последуют за событием mousedown,
if (document.addEventListener) { // Стандартная модель событий
// Зарегистрировать перехватывающие обработчики в документе
document.addEventListener( "mousemove", moveHandler, true);
document.addEventListener("mouseup”, upHandler, true);
}
else
if (document.attachEvent) { // Модель событий IE для IE5-8
// В модели событий IE перехват событий осуществляется вызовом
// метода setCapture элемента.
elementToDrag.setCaptuге;
elementToDrag.attachEvent("onmousemove”, moveHandleг);
elementToDrag.attachEvent("onmouseup", upHandler);
// Интерпретировать потерю пер’ехвата событий мыши как событие
mouseup elementToDrag.attachEvent("onlosecapture", upHandler);
}
Поделиться:
Популярные книги
Бастард Императора. Том 7
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Повелители сумерек
Фантастика:
фэнтези
ужасы и мистика
юмористическая фантастика
детективная фантастика
6.00
рейтинг книги
Барон
5. Ученик
Фантастика:
фэнтези
5.60
рейтинг книги
Неучтенный элемент. Том 10
10. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Менталист. Революция
3. Выиграть у времени
Фантастика:
боевая фантастика
5.48
рейтинг книги
Геном хищника. Книга третья
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Том 3. Рассказы 1896-1899
3. Собрание сочинений в тридцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Артефактор. Шаг в неизвестность
1. Артефактор
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.12
рейтинг книги
Вечный. Книга III
3. Вечный
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Неучтенный элемент. Том 3
3. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Телохранитель Генсека. Том 2
2. Медведев
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Черный рынок
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Наномашины, наследник! Том 9
9. Первый среди карапузов
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Я уже граф. Книга VII
7. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00