Чтение онлайн

на главную - закладки

Жанры

Введение в JavaScript для Мага
Шрифт:

Механизм drag & drop, который мы хотим здесь реализовать, ограничивается web-страницей. Поэтому Вы не можете использовать представленный здесь код, чтобы переносить объекты с HTML-страницы на жесткий диск вашего компьютера или другие подобные действия. (Начиная с версии 4.0 браузера Netscape Navigator ваш скрипт может реагировать на событие с названием DragDrop, событие, когда кто-либо перетаскивает файл на окно вашего браузера. Но это не совсем то, о чем мы здесь хотим поговорить)

Посмотрите пример, который мы будем рассматривать в этой главе. После того,

как откроется страница, Вы можете, нажав клавишу мыши, перетаскивать различные объекты:

Также можно рассмотреть пример, предоставленный компанией Netscape. Найти его Вы сможете по адресу: http://home.netscape.com/comprod/products/communicator/user_agent_vacation.html

Язык JavaScript не поддерживает напрямую механизм drag & drop. Это значит, что у нас нет возможности назначить объекту image свойство dragable (перемещаемый) или что-либо в этом роде. Поэтому мы должны сами писать необходимый для этого код. Впрочем, Вы увидите, что это не так сложно.

Итак, то же нам нужно? Нам нужны две вещи. Во-вервых, мы должны регистрировать определенные события, связанные с работой мышью, то есть нужно понять, каким образом, мы сможем узнать, какой объект необходимо переместить и на какую позицию? Затем нам нужно подумать, каким именно образом мы сможем показывать перемещение объектов по экрану. Конечно же, мы будем пользоваться такой новой возможностью языка, как слои, при создании объектов и перемещении их по экрану. Каждый объект представлен собственным слоем.

События при работе с мышью в JavaScript 1.2

Какие события, происходящие при работе с мышью, нам следует использовать? У нас нет такого события, как MouseDrag, однако того же самого мы можем достичь, отслеживая события MouseDown, MouseMove и MouseUp. В версии 1.2 языка JavaScript используется новая модель событий. И без нее мы не смогли бы решить нашу задачу. Я уже говорил об этой новой модели на предыдущем уроке. Однако давайте взглянем на некоторые важные ее части еще раз.

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

Другой важной момент заключается в перехвате событий. Если пользователь, например, щелкает по клавише мыши, то сигнал о соответствующем событии посылается непосредственно объекту button. Однако в нашем примере необходимо, чтобы событие обрабатывалось объектом window (окно). Поэтому мы позволяем объекту окна перехватывать сигнал о событии, связанном с мышью, т. е. чтобы именно объект window фиксировал это событие и имел возможность на него реагировать. Это демонстрируется в следующем примере (на примере события Click). Вы можете щелкнуть в любом месте окна браузера. При этом возникнет окно сообщения, где будут показаны координаты точки, где это событие имело место.

Код этого примера:

<html>

<script language="JavaScript">

<!-

window.captureEvents(Event.CLICK);

window.onclick= displayCoords;

function displayCoords(e) {

alert("x: " + e.pageX + " y: " + e.pageY);

}

// — >

</script>

"Кликните"

клавишей мыши где-нибудь в этом окне.

</html>

Сперва мы сообщаем, что объект window перехватывает сигнал о событии Click. Для этого мы пользуемся методом captureEvent. Строка

window.onclick= displayCoords;

говорит о том, что должно происходить, когда случается событие Click. Конкретнее, здесь сообщается, что в качестве реакции на событие Click браузер должен вызвать процедуру displayCoords (Заметим, что Вам при этом не следует ставить скобки после слова displayCoords). В свою очередь, displayCoords — это функция, которая определяется следующим образом:

function displayCoords(e) {

alert("x: " + e.pageX + " y: " + e.pageY);

}

Как видите, эта функция имеет аргумент (мы назвали его e). На самом деле это объект Event, который передается на обработку функции displayCoords. Объект Event имеет свойства pageX и pageY (наряду с другими), из которых моно получить координаты точки, где произошло событие. Окно с сообщением лишь показывает эти значения.

MouseDown, MouseMove и MouseUp

Как я уже говорил, в языке JavaScript нет события MouseDrag. Поэтому мы должны пользоваться событиями MouseDown, MouseMove и MouseUp, реализуя механизм drag & drop. В следующем примере демонстрируется применение MouseMove — текущие координаты курсора мыши отображаются в окне состояния.

Можно видеть, что код скрипта почти такой же, как и в предыдущем примере:

<html>

<script language="JavaScript">

<!-

window.captureEvents(Event.MOUSEMOVE);

window.onmousemove= displayCoords;

function displayCoords(e) {

status= "x: " + e.pageX + " y: " + e.pageY;

}

// — >

</script>

Координаты мыши отображаются в строке состояния.

</html>

Заметьте, что Вам необходимо написать именно Event.MOUSEMOVE, где слово MOUSEMOVE обязательно должно быть написано заглавными буквами. А указывая, какая функция должна быть вызвана, когда произойдет событие MouseMove, Вы должны писать ее строчными буквами: window.onmousemove=…

Поделиться:
Популярные книги

Все будет по-моему! Часть 14

Wing-Span
14. Всё будет по-моему!
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Все будет по-моему! Часть 14

Цеховик. Книга 1. Отрицание

Ромов Дмитрий
1. Цеховик
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Цеховик. Книга 1. Отрицание

Алексей Михайлович

Соловьев Всеволод Сергеевич
4. Романовы. Династия в романах
Проза:
историческая проза
5.50
рейтинг книги
Алексей Михайлович

"Фантастика 2023-134". Компиляция. Книги 1-22

Демина Карина
Фантастика 2023. Компиляция
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Фантастика 2023-134. Компиляция. Книги 1-22

Полное собрание сочинений в одной книге

Зощенко Михаил Михайлович
Проза:
классическая проза
русская классическая проза
советская классическая проза
6.25
рейтинг книги
Полное собрание сочинений в одной книге

Миф

Серый Александр
Фантастика:
научная фантастика
5.00
рейтинг книги
Миф

А.и Б. Стругацкие. Собрание сочинений в 10 томах. Т.6

Стругацкие Аркадий и Борис
6. Собраниния сочинений в 10 томах
Фантастика:
социально-философская фантастика
научная фантастика
7.00
рейтинг книги
А.и Б. Стругацкие. Собрание сочинений в 10 томах. Т.6

Матабар IX

Клеванский Кирилл Сергеевич
9. Матабар
Проза:
магический реализм
5.00
рейтинг книги
Матабар IX

Китайская, японская, тайская кухни

Перепелкина Н. А.
Дом и Семья:
кулинария
5.00
рейтинг книги
Китайская, японская, тайская кухни

Я еще не бог. Книга XXXV

Дрейк Сириус
35. Дорогой барон!
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Я еще не бог. Книга XXXV

Чувствуй себя как хочешь

Холланд Саммер
2. Парни из Манчестера
Любовные романы:
остросюжетные любовные романы
5.00
рейтинг книги
Чувствуй себя как хочешь

Географ глобус пропил. Золото бунта

Иванов Алексей Викторович
Проза:
современная проза
7.86
рейтинг книги
Географ глобус пропил. Золото бунта

Игра

Анкай Виктория
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Игра

Земля в иллюминаторе

Кин Румит
Фантастика:
фэнтези
5.00
рейтинг книги
Земля в иллюминаторе