【问题标题】:Flash / AS3 - How to Disable Child SWF Mouse Clicks Without Disabling Mouse Hover EventsFlash / AS3 - 如何在不禁用鼠标悬停事件的情况下禁用子 SWF 鼠标点击
【发布时间】:2015-09-28 11:43:24
【问题描述】:

我有一个使用 Loader 对象加载子 swf 的 Flash 浏览器应用程序。

子 swf 有一个 mouseclick 监听器,它调用 nativateToUrl,并打开一个新网页。它还包含使 swf 中的东西移动的鼠标悬停事件。

这个执行加载的应用程序就像一个子 swf 的容器,当它被点击时应该打开一个不同的网页。所以本质上我想抑制子 swf mouseEvent 并监听鼠标点击容器 swf,打开新的 URL。

我听说其他人在原始内容上放置了一个不可见的精灵,这样子 swf 就不会真正捕捉到鼠标点击事件。但是,这在我的情况下不起作用,因为它也不会获得鼠标悬停事件。我希望 mousehover 事件通过并使子 swf 中的东西移动但也抑制单击事件。

那么,对于所有的闪存策划者来说……这可能吗?我该怎么做?

:) 谢谢。

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    如果您想禁止所有 MouseEvent.CLICK 事件到达加载的 SWF,您可以执行以下操作:

    假设您有以下设置:

    var loader:Loader = new Loader();
    loader.load(new URLRequest("child.swf"));
    addChild(loader);
    

    您可以做的是在捕获阶段监听加载器上的点击事件:

    loader.addEventListener(MouseEvent.CLICK, handler, true);//the third parameter (true) tells flash to listen on the capture phase of an event's lifecycle
    

    然后在点击处理程序中,取消该事件,使其不会传播到加载的 SWF:

    function handler(e:Event):void {
        e.stopImmediatePropagation();
    }
    

    如果您不了解事件的各个阶段,Adobe 的这张图表可能会有所帮助:

    Source

    顺便说一句,如果您想抑制 SWF 中的所有鼠标内容,一个更好的方法(而不是添加不可见的精灵)就是这样做:

    loader.mouseChildren = false;
    

    【讨论】:

    • 没问题!这是个好问题。如果您认为答案正确回答了您的问题,请接受答案(投票按钮下方的灰色复选标记)。
    • 更新 - 对不起蝙蝠侠,这不起作用。鼠标事件永远不会被触发。它似乎可以在 IDE flash 播放器中工作,但不能在浏览器中工作......:/
    • 测试了更多。我可以告诉你这 100% 有效。如果您愿意,我可以向您发送测试源文件。您的问题必须在实施中。更新您的问题以包含您正在使用的实际代码。
    • 好的。我确实让它工作了,但我必须做 _swfLoader.content 或 _swfLoader 的 chld 并且还要解决安全沙箱问题。现在可以工作了。谢谢。
    猜你喜欢
    • 2011-03-23
    • 2020-11-16
    • 2022-01-25
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    相关资源
    最近更新 更多