Вы видите этот текст, потому что Ваш браузер не поддерживает таблицы стилей (CSS)
Далее следует текстовое представление элементов интерфейса и, после этого, сама страница.


Вспомогательное меню:


Навигация:


Быстрый переход:


Поиск:

Найдено 0 документов
x
  1. Лицензионное соглашение и авторские права (Справка)
    /about/license.htm
  2. dom_backgroundcolor (Telement)
    /artlab/webvi/javascript/telement/dom_backgroundcolor.htm

Текущая иерархия:

mevents
mevents

WebVI.mevents

Решение WebVI.mevents устраняет проблемы правильной генерации событий от мыши и проблемы совместимости событийной модели разных браузеров:

Использование mevents с объектами иерархии DOM

Использование mevents с объектами иерархии Telement

Как это работает

Совместимость и разрешение проблем

Модуль mevents.js - основные структуры

mevents

Обработка событий мыши

WebVI.mevents предоставляет унифицированную систему обработки событий от мыши (mouseover, mouseout, mouseclick), реализованную в модуле webvi_mevents.js. Зачем потребовалось дополнять событийную модель браузера специальной надстройкой? Поводите мышь над объектами первого интерактивного примера.

<div id=earth>
<div id=europe>
<div id=france></div>
<div id=england></div>
</div>
<div id=usa></div>
</div>
earth
europe
england
france
Дамп событий:
Интерактивный пример 1. Стандартная генерация событий мыши

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

Передвиньте мышь с объекта england на объект france. Посмотрите, как браузер сгенерировал события: мышь не покидала объекты europe и earth, однако соответствующие события были сгенерированы. В этом и заключается проблема дубликатов. Устранение дубликатов, казалось бы, возможно реализовать, ведь у событийного объекта event есть средство приостановки передачи события по иерархии (и, следовательно, порождения лишних дубликатов события) – свойство cancelBubble. Однако, во-первых, его использование подразумевает описание обработчиков у всех потомков элемента (что громоздко), во-вторых, доступ к событийному объекту реализован различным образом у разных браузеров и, в-третьих, порядок порождения событий всё-равно остаётся таким, каким он предусмотрен стандартом: от объекта, лежащего глубже в иерархии, ко всё более верхним объектам. Следующий рисунок иллюстрирует проблему порядка событий.

Иллюстрация неправильной генерации события браузером

Здесь мышь переходит из точки 1 в точку 2. Даже если избавиться от дубликата событий earth.moseout и earth.mouseover, браузер генерирует события в таком порядке:

england.mouseover
europe.mouseover

Однако, с точки зрения иерархического подхода, это неправильно: нельзя оказаться в Англии, не будучи, при этом, в Европе. События должны генерироваться так:

europe.mouseover
england.mouseover

Согласитесь, стандартная модель не слишком логична! Программисты визуальных сред гораздо привычнее к модели, показанной во втором интерактивном примере.

<div id=earth>
<div id=europe>
<div id=france></div>
<div id=england></div>
</div>
<div id=usa></div>
</div>
earth
europe
england
france
Дамп событий:
Интерактивный пример 2. Генерация событий мыши системой WebVI.mevents

Здесь события генерируются корректно: в правильном порядке и без лишних дубликатов.

mevents

Свободное использование WebVI.mevents

Функциональностью mevents можно пользоваться без WebVI. Для это подключите к своей странице модуль webvi_mevents.js, представляющий собой извлечение из webvi.js.