2013-05-29 75 views
0

我負責Flash的同事要求我幫助他阻止文檔滾動默認操作。JavaScript preventDefault也會阻止Chrome中的滾動滾動事件

我添加下面的代碼來幫助他。

<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

經過集體討論三天,我終於找到了解決(這個問題是最重要對我來說) 我創建了一個小型的lib,可以幫助你照顧這個「錯誤」的Chrome瀏覽器: Github repo

它幾乎就像MouseWheelTrap,你必須調用.init()函數,它現在需要一個額外的參數 - 你的flashObject id或name。有關更多信息,請參閱repo README。

所以這裏是我的解決方案: 我們在瀏覽器中監聽滾動事件,當它發生並且我們有Chrome瀏覽器時,我們在Flash中調用內部函數來模仿用戶滾動(我們手動將事件派發到舞臺上)在我們的JS腳本中調用event.preventDefault()函數之前。如果我們有一個不同的瀏覽器,它只是調用event.preventDefault()(或IE的returnValue = false),以防止Flash中的雙重事件滯後。

乾杯!

+1

不適用於新的PPAPI閃光燈。 http://flassari.is/2012/08/mouse-scroll-wheel-in-flash-not-working-in-chrome/ – 62316e

+0

你可以提高圖書館的工作效率嗎?我沒有觸及AS3和Flash的開發一年多,我完全不知道那裏發生了什麼 – KumoKairo