【问题标题】:Flash: Tracking mouse position after click-and-drag (down-and-move), even outside the stage/browser?Flash:在点击并拖动(向下移动)后跟踪鼠标位置,甚至在舞台/浏览器之外?
【发布时间】:2011-06-29 06:11:44
【问题描述】:

当有人有以下情况时,从 Adob​​e Flash 跟踪鼠标位置的正确方法是什么:

  1. 在 Flash 应用程序中开始拖动(MOUSE_DOWN 事件),
  2. 将鼠标拖到应用程序甚至浏览器窗口之外(MOUSE_MOVE 事件),并且
  3. 释放鼠标按钮(MOUSE_UP 事件)?

例如(假设 Stack Overflow 是一个 Flash 应用程序):

在应用程序中,我可以使用 MOUSE_MOVE 事件侦听器跟踪鼠标 X 和 Y 的位置,但是当它离开浏览器时我会丢失它...

那么,无论鼠标走到哪里,我如何跟踪它的位置?

举个例子,试试Google Finance。尝试拖动图表;如果您将鼠标移出浏览器窗口,它仍然会拖动,当您释放鼠标时,鼠标将在浏览器之外。

另外,请查看KOKO KAKA;如果您单击滚动条(使浏览器窗口变小)并移出浏览器窗口,滚动条会像真正的滚动条一样移动。

我相信两者都起作用,因为 MOUSE_DOWN 事件“捕获”了鼠标,允许 Flash 应用程序跟踪鼠标的位置,即使它在浏览器之外。

您如何能够保持这样的事件触发?

谢谢! ♥

【问题讨论】:

    标签: javascript flash actionscript mouse position


    【解决方案1】:

    这可以使用 MouseEvent.MOUSE_MOVE 事件来实现。将此代码放在带有动态文本字段的 fla 的第一帧上,该字段在舞台上的实例名称为“输出”。

    import flash.events.MouseEvent;
    
    stage.addEventListener( MouseEvent.MOUSE_DOWN, onMouseDownHandler );
    stage.addEventListener( MouseEvent.MOUSE_UP, onMouseUpHandler );
    
    function onMouseDownHandler ( evt : MouseEvent ) : void
    {
        outputText( "Mouse Down" );
        stage.addEventListener( MouseEvent.MOUSE_MOVE, onMouseMoveHandler );
    }
    
    function onMouseUpHandler ( evt : MouseEvent ) : void
    {
        outputText( "Mouse Up" );
        stage.removeEventListener( MouseEvent.MOUSE_MOVE, onMouseMoveHandler );
    }
    
    function onMouseMoveHandler ( evt : MouseEvent ) : void
    {
        outputText( "Mouse move" );
        outputText( "Mouse Y: " + mouseY );
        outputText( "Mouse X: " + mouseX );
    }
    
    function outputText ( outputString : String ) : void
    {
        output.appendText( "\n" + outputString );
    }
    

    单击并将鼠标拖出屏幕,您将看到移动事件被触发,您可以获得鼠标的 x 和 y 位置。我在独立的 swf 和浏览器中对此进行了测试。

    【讨论】:

    • 好吧,该死的——猜猜我被证明是错的——这有助于解决我几周前为之奋斗了一整天的问题——谢谢!
    • @jea 我对这个问题的第一反应和你的回答一样。当我测试它并且它起作用时,我感到很惊讶。
    【解决方案2】:

    您不能 - 您可以使用 MOUSE_LEAVE 侦听器来获取它何时离开您的 Flash 区域,但是当您的鼠标位于浏览器视口之外(甚至工具栏、状态栏等)。

    【讨论】:

    • Google Finance 是如何做到的? (尝试拖动图表;如果您经常移动鼠标,它仍然会四处拖动,并且当您松开鼠标时,您的鼠标将在浏览器之外)。
    • @Alexandra - 很好。希望有人知道。
    • @Kriem - 我相信它之所以有效,是因为 MOUSE_DOWN 事件“捕获”了鼠标,允许 Flash 应用程序跟踪鼠标的位置,即使它在浏览器之外。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2011-02-26
    • 2015-12-05
    • 2017-03-23
    • 2022-11-10
    • 1970-01-01
    • 2013-08-21
    相关资源
    最近更新 更多