【发布时间】:2011-05-13 14:46:55
【问题描述】:
简化代码:
//triggered on MouseEvent.MOUSE_DOWN
private function beginDrag(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE, drag);
stage.addEventListener(MouseEvent.MOUSE_UP, endDrag);
stage.addEventListener(Event.DEACTIVATE, endDrag);
contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, endDrag);
}
private function drag(e:MouseEvent):void
{
//do stuff
}
private function endDrag(e:Event):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
stage.removeEventListener(MouseEvent.MOUSE_UP, endDrag);
stage.removeEventListener(Event.DEACTIVATE, endDrag);
contextMenu.removeEventListener(ContextMenuEvent.MENU_SELECT, endDrag);
}
我在我的 Flash 代码中使用了一些点击和拖动技术,我注意到 MOUSE_UP 事件存在一些漏洞:
- 如果在鼠标仍被按住的情况下激活上下文菜单,它将不会被触发。
- 如果窗口被停用(alt+tab 或类似),它不会被触发
我的问题是: 哪些其他事件可能会中断 MOUSE_UP 事件并导致意外行为?
此外,有没有一种方法可以为 所有 上下文菜单一般捕获 ContextMenuEvent.MENU_SELECT 而无需手动添加/删除每个上下文菜单的侦听器?
【问题讨论】:
-
你在拖什么拖什么?可拖动对象是否应该仅在鼠标悬停时移动,或者它在鼠标左键按下时移动到光标之后?我在问,因为在大多数情况下,恕我直言,最好是
MouseEvent.MOUSE_MOVE侦听器和event.buttonDown检查是最佳实践 -
@www0z0k 显然您甚至没有阅读我的代码。如果可以的话,我会给你-1的评论。我已经掌握了拖拽的基本知识这不是问题问题是当一些无关的事件触发时会阻止
MOUSE_UP事件被flash捕获。 -
我最好发布一个答案 ;)
Event.MOUSE_LEAVE在调用上下文菜单时调度,当释放左 btn 的鼠标离开舞台或当鼠标离开时释放左 btn舞台
标签: flash actionscript-3 actionscript