【问题标题】:Javascript mousemove event does not fire when mouse is over flash鼠标在 Flash 上时不会触发 Javascript mousemove 事件
【发布时间】:2012-01-25 12:45:25
【问题描述】:

我正在使用 Javascript 的鼠标事件将有关鼠标位置的信息传递给 flash 并根据鼠标位置显示特定的动画帧。

问题是,当鼠标悬停在 flash 对象上时,它不再触发 javascript 事件。我已经在 Chrome 上测试过,它似乎可以工作,但 Firefox 不想合作。

我的 Flash 对象位于网站的中间,并且具有透明背景。它必须保持这种状态。另外,出于两个原因,我宁愿不将动作移至 ActionScript:

  1. 网站的宽度不是恒定的(例如不同的浏览器),所以我也必须将视口的宽度推送到 flash,这会使脚本复杂化,mouseenter 事件等也会变得复杂。

  2. 我不太了解AS。

代码:(我在这里使用 jQuery,因为它也在页面的其他地方使用,之前的模型使用纯 JS)

    function viewport()
    {
        var e = window
        , a = 'inner';
        if ( !( 'innerWidth' in window ) )
        {
        a = 'client';
        e = document.documentElement || document.body;
        }
        return e[ a+'Width' ];
    }

    puszka = document.getElementById("puszka");

    $().mousemove(function(e)
    {
        var x = e.pageX || e.clientX + document.body.scrollLeft;
        var frame = Math.floor(x * 100 / viewport());
        puszka.transformCan(frame);
    });

【问题讨论】:

    标签: javascript jquery flash actionscript mouse


    【解决方案1】:

    Actionscript 能够识别移动、单击等鼠标事件。 所以我假设 Firefox 将责任传递给 flash 对象,当涉及到 flash 是一切的主人的区域时。

    在 AS 中处理鼠标移动并不困难。如果您了解 Javascript,您还可以使用提供的文档有效地编写 Actionscript。

    如果我没记错的话,你只需要将舞台添加到监听器:

    stageObj.addEventListener(MouseEvent.MOUSE_MOVE, yourFunction);
    

    然后让“yourfunction”成为能够通过“ExternalInterface”调用您的javascript函数的处理程序。

    【讨论】:

    • 问题是,我必须知道flash在文档中的相对位置才能正确计算frame。
    • 然后将捕获的 X 和 Y 位置传递给调用 javascript 函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多