Ответ 1
Я создал небольшую библиотеку, которая обрабатывает все для вас. Он работает идеально (насколько я проверял) по умолчанию плагин Flash Player, на Pepper flash и на MAC-OS. И вам не нужно добавлять какие-либо файлы .js в вашу папку HTML
По существу, у меня есть Flash-контент, который прокручивается на колесике мыши. Он отлично работает, если в браузере нет другого контента, так что панель прокрутки браузера включена - если это так, как окно браузера, так и мой SWF-свиток на колесике мыши. Есть ли способ исправить это поведение?
Аналогичный вопрос задан здесь:
отключить прокрутку колесика мыши при перемещении курсора по гибкому окну.
который ссылается на решение, размещенное в блоге:
http://www.spikything.com/blog/index.php/2009/11/27/stop-simultaneous-flash-browser-scrolling/
Но решение не работает на всех браузерах! Хотя он работает в некоторых браузерах Windows, он совсем не работает на Mac OS X - он регистрирует события колесика мыши в Firefox, но их вообще не запускают в Chrome и Safari.
Теперь я знаю, что (в официальном документе Adobe InteractiveObject docs) колесо мыши, предположительно, поддерживается только в системах 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 Player, на Pepper flash и на MAC-OS. И вам не нужно добавлять какие-либо файлы .js в вашу папку HTML
Вы должны быть в состоянии сделать это полностью через 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);
Вам может потребоваться проверить варианты scroll
и mousewheel
для доступа к событиям Webkit. См. здесь.
Я считаю, что вам придется подключить событие в JS на странице, а затем предотвратить по умолчанию и отправить событие (delta) на вашу флешку. Код, который вы опубликовали, выглядит так, что он немного улучшает (предотвращает по умолчанию), но я не вижу, где код подключает DOM.