0

我负责 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...

有人也有这个问题吗?如何解决?谢谢。

4

1 回答 1

1

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

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

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

干杯!

于 2013-07-24T11:29:13.283 回答