У меня возникла проблема, связанная с событием колесика мыши (DOMMouseScroll) в firefox. У меня есть div заголовка, div контента и div нижнего колонтитула. Я хочу, чтобы пользователь мог прокручивать страницу в верхнем и нижнем колонтитулах, но не в содержимом, потому что у него есть объект карты (флэш-объект), а колесико мыши должно увеличивать и уменьшать масштаб.
Я использую jQuery 1.8 и Firefox 15.0.1. Я потратил почти весь день, пытаясь понять это, и мне кажется, что это должно сработать:
var isFireFox = (navigator.userAgent.indexOf('Firefox') != -1);
var scrollEv = (isFireFox)? 'DOMMouseScroll' : 'mousewheel';
$(document).on(scrollEv, HandleScroll);
function HandleScroll(e)
{
var sender = event.srcElement;
alert(sender.id + " has sent event: " + e.type);
if (sender.id == "viewerContent" || sender.id == "mapObject")
{
alert("Event is being blocked");
e.stopPropagation();
e.preventDefault();
}
}
Я прочитал бесчисленное количество сообщений, тем и блогов, и все, что я читал, говорит, что это должно работать в IE, Chrome и Firefox. Конечно, это не работает в FireFox. Он даже не входит в функцию «HandleScroll». Кроме того, я думаю, что должно быть даже возможно сделать что-то более простое, например:
$('#viewerContent').on(scrollEv, false);
$('#mapObject').on(scrollEv, false);
Я проглядел что-то простое или что?
Спасибо за помощь,
Ггилманн
Добавлено:
Следуя предложению Фабрицио Матте, я также попробовал это:
$('#viewerContent').scroll(HandleScroll);
$('#mapObject').scroll(HandleScroll);
И это :
$('#viewerContent').on('scroll', HandleScroll);
$('#mapObject').on('scroll', HandleScroll);
Но безрезультатно!
Добавлено снова:
jcubic предложил мне использовать плагин на этой странице: github.com/brandonaaron/jquery-mousewheel
Я не слишком уверен, как это работает, я должен просто включить скрипт на свою страницу через тег скрипта, а затем вызвать один из методов, как показано в примере по предоставленной ссылке?
Спасибо
Дополнительное дополнение:
Плагин у меня заработал, все очень просто. Однако это не решает мою проблему. Это работает для стандартного div, но, похоже, не работает для div, содержащего флэш-контент. Я начинаю думать, что это ошибка Flash или Firefox, как, возможно, описано здесь: http://cookbooks.adobe.com/post_Workaround_to_support_mouse_wheel_for_FireFox_with-13086.html
Если бы кто-нибудь мог подтвердить это, я был бы признателен.
Еще одно решение, которое не работает:
Следуя предложению sethetter, я попробовал это:
var isOverContent;
$('#viewerContent').on('mouseover', function(){isOverContent = true;});
$('#viewerContent').on('mouseout', function(){isOverContent = false;});
document.onscroll = HandleScroll;
function HandleScroll(e)
{
if (isOverContent)
{
console.log("Tried to block event");
e.stopPropagation(); // Apparently, the "scroll" event cannot be prevented or canceled.
e.preventDefault();
}
}
Это позволяет мне определить, когда пользователь прокручивал viewerContent в FireFox. Однако события предотвращения по умолчанию и остановки распространения не работают. Страница продолжает прокручиваться.
$('#viewerContent').on('scroll', handler)
/$('#viewerContent').scroll(handler)
? Конечно, если вы действительно хотите отменить событие прокрутки, это будет просто раздражать пользователя, но теоретическиe.preventDefault()
должно работать. - person Fabrício Matté   schedule 03.10.2012opaque
. Это означает, что браузер пытается отобразить окно Flash как часть фактической страницы, однако это может иметь побочные эффекты для содержимого Flash. helpx.adobe.com/flash/kb/ - person Pebbl   schedule 04.10.2012