Как остановить одновременную прокрутку браузера и мыши SWF в AS3? - PullRequest
11 голосов
/ 20 декабря 2011

По сути, у меня есть флэш-контент, который прокручивается на колесе мыши.Он работает нормально, если в браузере нет другого контента, такого как полоса прокрутки браузера - в этом случае и окно браузера И моя прокрутка SWF на колесе мыши.Есть ли способ исправить это поведение?

Подобный вопрос, заданный здесь:

отключить прокрутку колесика мыши при наведении курсора на приложение flex?

, на который ссылаетсяРешение о блогах здесь:

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);

Эта кошка, по крайней мере, на правильном пути, или есть лучшее (то есть полностью функциональное) решение?

Ответы [ 4 ]

3 голосов
/ 29 июля 2013

Я создал небольшую библиотеку, которая обрабатывает все для вас. Он отлично работает (насколько я тестировал) на плагине Flash Player по умолчанию, на Pepper flash и на MAC-OS. И вам не нужно добавлять какие-либо файлы .js в вашу папку HTML

GIhub репо

2 голосов
/ 29 апреля 2013

Вы должны быть в состоянии сделать это полностью через 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);
0 голосов
/ 06 января 2012

Полагаю, вам придется перехватить событие в JS на странице, затем запретить событие по умолчанию и отправить событие (дельта) на свою флэш-память. Код, который вы разместили, выглядит так, как будто он его настраивает (исключая дефолт), но я не вижу, где код перехватывает DOM.

0 голосов
/ 20 декабря 2011

Вам может потребоваться проверить варианты scroll и mousewheel для доступа к событиям Webkit.Смотри здесь .

...