簡體   English   中英

如何在AS3中停止同時進行瀏覽器和SWF鼠標滾輪滾動?

[英]How to stop simultaneous browser and SWF mouse wheel scrolling in AS3?

基本上,我有在鼠標滾輪上滾動的flash內容。 它工作正常,除非瀏覽器中有其他內容,以便啟用瀏覽器的滾動條 - 在這種情況下,瀏覽器窗口和我的SWF都在鼠標滾輪上滾動。 有沒有辦法糾正這種行為?

類似的問題在這里問:

光標在flex app上時禁用鼠標滾輪滾動?

這里引用了博客的解決方案:

http://www.spikything.com/blog/index.php/2009/11/27/stop-simultaneous-flash-browser-scrolling/

但該解決方案並不適用於所有瀏覽器! 雖然它適用於某些Windows瀏覽器,但它在Mac OS X上根本不起作用 - 它在Firefox中注冊了鼠標滾輪事件,但它們在Chrome和Safari中根本沒有被解雇。

現在我知道(根據官方Adobe InteractiveObject文檔)鼠標滾輪據說只在Windows系統上受支持,但默認情況下在Mac OS X上仍會觸發該事件。這是否同時滾動錯誤是不支持的原因?

編輯:在上述解決方案中添加更多信息...

請注意,上述解決方案基本上使用ExternalInterface將以下JavaScript發送到“eval”函數:

var browserScrolling;

function allowBrowserScroll(value) {
    browserScrolling = value;
}
function handle(delta) {
    if (!browserScrolling) {
        return false;
    }
    return true;
}
function wheel(event) {
    var delta = 0;
    if (!event) {
        event = window.event;
    }
    if (event.wheelDelta) {
        delta = event.wheelDelta / 120;
    } else if (event.detail) {
        delta = -event.detail / 3;
    }
    if (delta) {
        handle(delta);
    }
    if (!browserScrolling) {
        if (event.preventDefault) {
            event.preventDefault();
        }
        event.returnValue = false;
    }
}
if (window.addEventListener) {
    window.addEventListener('DOMMouseScroll', wheel, false);
}
window.onmousewheel = document.onmousewheel = wheel;
allowBrowserScroll(true);

這只貓至少在正確的道路上,還是有更好的(即功能齊全的)解決方案?

我創建了一個小型庫,可以為您處理所有事情。 它在默認的flash播放器插件,Pepper閃存和MAC-OS上運行完美(據我測試)。 而且您不需要將任何.js文件添加到HTML文件夾中

GIhub回購

你應該可以通過javascript完全做到這一點......

首先你需要聽“輪子”,“鼠標輪”和“DOMMouseScroll”。 看來DOMMouseScroll僅適用於Firefox .....

其次 - 在javascript中完全執行此操作可能會更好一些:

// pseudo-code -- this tests for all "Objects" using not-so-standard elementFromPoint;
// You can also look for the element directly using id
    var fn = function(e) {
        var element = document.elementFromPoint(e.pageX, e.pageY);
        if (element && element.tagName === 'OBJECT') {
            e.preventDefault();
            e.stopPropagation();
        }
    }

    window.addEventListener('DOMMouseScroll', fn);
    window.addEventListener('mousewheel', fn);

您可能需要測試scrollmousewheel的變化以訪問Webkit事件。 看到這里

我相信你必須在頁面上將事件掛鈎到JS,然后防止默認,並將事件(delta)發送到你的flash。 您發布的代碼看起來有點設置(防止默認)但我沒有看到代碼掛鈎DOM的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM