При реализации любого пользовательского интерфейса, поддерживающего опе_ рации перетаскивания мышью (например, раскрывающегося меню), очень важ_ но иметь возможность перехватывать события мыши, чтобы можно было кор_ ректно обрабатывать перемещение указателя мыши независимо от того, какой объект перетаскивает пользователь. В модели обработки событий DOM это мож_ но реализовать с помощью перехватывающих обработчиков событий. В IE 5 и бо_ лее поздних версиях аналогичная операция выполняется с помощью методов setCapture() и releaseCapture().
Методы setCapture() и releaseCapture() имеются у всех HTML_элементов. Когда вы_ зывается метод setCapture() некоторого элемента, все последующие события мы_ ши направляются этому элементу, а обработчик события сможет обработать их, прежде чем они начнут всплытие. Примечательно, что это относится только к со_ бытиям мыши mousedown, mouseup, mousemove, mouseover, mouseout, click и dblclick.
17.3. Модель обработки событий Internet Explorer
После вызова setCapture() события мыши распространяются по специальному маршруту, пока не будет вызван метод releaseCapture() или пока перехват собы_ тий не прервется. Перехват событий мыши может быть прерван в результате по_ тери броузером фокуса ввода, вызова диалогового окна методом alert(), отобра_ жения системного меню и в других подобных случаях. Если происходит один из таких случаев, элемент, в контексте которого был вызван метод setCapture(), по_ лучает событие onlosecapture, извещающее о том, что он больше не будет полу_ чать перехватываемые события мыши.
В большинстве случаев метод setCapture() вызывается в ответ на событие mouse_ down, что гарантирует получение событий мыши тем же самым элементом. Эле_ мент выполняет действия по перетаскиванию в ответ на событие mousemove и вы_ зывает releaseCapture() в ответ на (перехваченное) событие mouseup.
Использование методов setCapture() и relaseCapture() иллюстрирует пример 17.4 далее в этой главе.