JavaScript preventDefault还会阻止Chrome中的Flash滚动事件

时间:2013-05-29 05:52:08

标签: javascript flash google-chrome

我的Flash负责人要求我帮他阻止文件滚动默认操作。

我添加以下代码来帮助他。

<script type="text/javascript">
(function (document) {
    var cancelscroll = function (e){
        e.preventDefault();
    };

    if ('onmousewheel' in document) {
        document.getElementById('container').onmousewheel = cancelscroll;
    } else {
       document.getElementById('container').addEventListener('DOMMouseScroll', cancelscroll, false);
    }
})(document);
</script>

它在IE9和Firefox中运行良好,但它也阻止了Chrome中的Flash滚动事件。

我认为这很奇怪,该片段应该只阻止JavaScript事件,为什么它也会阻止Flash事件。

我的同事说他通过这个片段注册了滚动事件:

stage.addEventListener(MouseEvent.MOUSE_WHEEL, mask_wheel);

他只在回调中获得delta值,而不执行其他任务。

我不熟悉Flash,我的同事不熟悉JavaScript ......

任何人都有这个问题吗?怎么解决?感谢。

1 个答案:

答案 0 :(得分:1)

经过三天的头脑风暴,我终于找到了解决方案(这个问题对我来说至关重要) 我创建了一个小的lib,可以帮助你在chrome浏览器中处理这个“bug”: Github repo

它几乎就像MouseWheelTrap一样,你必须调用.init()函数,它现在需要一个额外的参数 - 你的flashObject id或name。有关详细信息,请参阅repo README。

所以这是我的解决方案: 我们在浏览器中听滚动事件,当它发生时我们有chrome浏览器,我们在flash中调用内部函数来模仿用户滚动(我们手动将事件直接发送到舞台上)之前我们调用event.preventDefault()函数在我们的JS脚本中。如果我们有不同的浏览器,它只调用event.preventDefault()(或IE的returnValue = false)以防止闪存中出现双重事件延迟。

干杯!