首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测Event.MOUSE_LEAVE时wmode=opaque或wmode=transparent

如何检测Event.MOUSE_LEAVE时wmode=opaque或wmode=transparent
EN

Stack Overflow用户
提问于 2011-03-25 18:05:49
回答 1查看 1.4K关注 0票数 0

我有一个定制的拖动事件,它对大多数事情都很有用:

代码语言:javascript
复制
stage.addEventListener( MouseEvent.MOUSE_DOWN, beginDrag );

function beginDrag( e:MouseEvent )
{
  stage.addEventListener( MouseEvent.MOUSE_MOVE, drag );
  stage.addEventListener( MouseEvent.MOUSE_UP, endDrag );
  stage.addEventListener( MouseEvent.DEACTIVATE, endDrag );
  stage.addEventListener( Event.MOUSE_LEAVE, endDrag );
  stage.addEventListener( Event.REMOVED_FROM_STAGE, stageEndDrag );

  //trigger beginDrag event
}
function drag( e:MouseEvent )
{
  //trigger drag event
}
function endDrag( e:Event )
{
  stage.removeEventListener( MouseEvent.MOUSE_MOVE, drag );
  stage.removeEventListener( MouseEvent.MOUSE_UP, endDrag );
  stage.removeEventListener( MouseEvent.DEACTIVATE, endDrag );
  stage.removeEventListener( Event.MOUSE_LEAVE, endDrag );
  stage.removeEventListener( Event.REMOVED_FROM_STAGE, stageEndDrag );

  //trigger endDrag event
}

问题是,当我将此代码与wmode=transparentwmode=opaque一起使用时,当MOUSE_UP事件从舞台上发生时,不会检测到MOUSE_LEAVE事件。

MOUSE_LEAVEtransparentopaque时,有没有检测transparent事件的方法?

是否有一种方法可以检测wmode是否设置为transparentopaque,以便可以实现工作?

EN

回答 1

Stack Overflow用户

发布于 2011-03-26 16:20:27

默认情况下,MOUSE_LEAVE不是一个可靠的事件。有时它会被解雇,而在其他时候却不会。你可以在网络上到处使用找出对此的抱怨

不过,有一件事你可以做,那就是手动检查鼠标是否在舞台上:

代码语言:javascript
复制
var out : Boolean = false;

stage.addEventListener (Event.ENTER_FRAME, checkMouse);

function checkMouse (ev:Event) : void {
    if (
        stage.mouseX < 0 || 
        stage.mouseX > stage.stageWidth || 
        stage.mouseY < 0 || 
        stage.mouseY > stage.stageHeight) 
    {
        if (!out) 
        {
            out = true;
            stage.dispatchEvent (new Event(Event.MOUSE_LEAVE));
        }
    } 
    else if (out) 
    {
        out = false;
        stage.dispatchEvent (new Event("mouseEnter"));
    }
}

这将在游标位于舞台区域之外时分派MOUSE_LEAVE事件,并在自定义"mouseEnter“事件重新进入时分派。然后,您可以将事件侦听器添加到舞台上,以便对这些事件作出可靠的反应,但您必须记住,一次可能会触发多个MOUSE_LEAVE (如果同时执行自定义的事件和内置的事件)。您可以检查out变量以防止事件处理程序的双重执行。

我不确定这是否适用于所有的stage.align和stage.scaleMode选项。它应该适用于StageScaleMode.NO_SCALE和StageAlign.TOP_LEFT的组合,对于您必须检查并可能找到解决办法的任何其他设置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5436360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档