В AS3 это выполняется путем добавления прослушивателя MouseEvent к сцене, прослушивающей событие MOUSE_UP.
head.addEventListener(MouseEvent.MOUSE_DOWN, _handleDown);
function _handleDown($evt:MouseEvent):void {
// add a MouseEvent.MOUSE_UP listener to the stage
stage.addEventListener(MouseEvent.MOUSE_UP, _handleUp);
head.removeEventListener(MouseEvent.MOUSE_DOWN, _handleDown);
head.addEventListener(MouseEvent.MOUSE_MOVE, _handleMove);
head.addEventListener(MouseEvent.MOUSE_UP, _handleUp);
head.startDrag(false, new Rectangle(stubDiv,0,width - stubDiv - ((levels-maxLevel)*stubDiv),0)
}
function _handleMove($evt:MouseEvent):void {
updateLevel();
}
function _handleUp($evt:MouseEvent):void {
// remove the MouseEvent.MOUSE_UP listener from the stage
stage.removeEventListener(MouseEvent.MOUSE_UP, _handleUp);
head.removeEventListener(MouseEvent.MOUSE_UP, _handleUp);
head.removeEventListener(MouseEvent.MOUSE_MOVE, _handleMove);
head.addEventListener(MouseEvent.MOUSE_DOWN, _handleDown);
head.stopDrag();
setHeadPos();
}
Как видите, из соображений стиля я избегаю использования анонимных функций в моих слушателях событий. Это обеспечивает большую гибкость в большинстве случаев, и, на мой взгляд, намного проще для чтения.
Что касается другой вашей проблемы, то, что "ручка прокрутки" не реагирует на события MOUSE_MOVE ... хотите ли вы, чтобы она все еще реагировала даже после того, как вы откатились от ручки? В зависимости от того, как вы хотите, чтобы это работало, это можно сделать разными способами.
Пожалуйста, уточните, какое именно поведение вы ищете.