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);
}
Поделиться:
Популярные книги
Легенды и мифы Древнего Востока
Древний мир
Документальная литература:
биографии и мемуары
6.25
рейтинг книги
Беглец
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Александр Великий или Книга о Боге
Проза:
историческая проза
8.20
рейтинг книги
Андер Арес
1. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Ричард Длинные Руки – эрцфюрст
Фантастика:
фэнтези
5.00
рейтинг книги
An ordinary sex life
Любовные романы:
современные любовные романы
love action
5.00
рейтинг книги
Место
Проза:
современная проза
5.00
рейтинг книги
Тайная история американской империи: Экономические убийцы и правда о глобальной коррупции
Документальная литература:
публицистика
8.33
рейтинг книги
Последний реанорец. Том IV
3. Высшая Речь
Фантастика:
фэнтези
5.20
рейтинг книги
Йога т4
5.00
рейтинг книги
Разбитое окно
8. Райм и Сакс
Детективы:
прочие детективы
7.75
рейтинг книги
Великие мифы и легенды. 100 историй о подвигах, мире богов, тайнах рождения и смерти
Старинная литература:
мифы. легенды. эпос
5.00
рейтинг книги
Том 3. Советский и дореволюционный театр
3. Собрание сочинений в восьми томах
Документальная литература:
критика
5.00
рейтинг книги
Кодекс Охотника. Книга XVII
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00