我的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 ......
任何人都有这个问题吗?怎么解决?感谢。
答案 0 :(得分:1)
经过三天的头脑风暴,我终于找到了解决方案(这个问题对我来说至关重要) 我创建了一个小的lib,可以帮助你在chrome浏览器中处理这个“bug”: Github repo
它几乎就像MouseWheelTrap一样,你必须调用.init()函数,它现在需要一个额外的参数 - 你的flashObject id或name。有关详细信息,请参阅repo README。
所以这是我的解决方案: 我们在浏览器中听滚动事件,当它发生时我们有chrome浏览器,我们在flash中调用内部函数来模仿用户滚动(我们手动将事件直接发送到舞台上)之前我们调用event.preventDefault()函数在我们的JS脚本中。如果我们有不同的浏览器,它只调用event.preventDefault()(或IE的returnValue = false)以防止闪存中出现双重事件延迟。
干杯!