Изпитвам доста проблем, свързан със събитието колело на мишката (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);
Нещо просто ли съм пропуснал или какво?
Благодаря за помощта,
Гилман
Добавено:
Следвайки предложението на Fabricio Matté, аз също опитах това:
$('#viewerContent').scroll(HandleScroll);
$('#mapObject').scroll(HandleScroll);
И този :
$('#viewerContent').on('scroll', HandleScroll);
$('#mapObject').on('scroll', HandleScroll);
Безрезултатно!
Добавен отново:
jcubic ми предложи да използвам приставката на тази страница: github.com/brandonaaron/jquery-mousewheel
Не съм много сигурен как работи, трябва ли просто да включа скрипта в страницата си чрез таг на скрипт, след което да извикам един от методите, както е показано в примера на предоставената връзка?
Благодаря
Допълнително допълнение:
Накарах приставката да работи, беше доста лесно. Това обаче не решава проблема ми. Работи за стандартен div, но изглежда не работи за div, съдържащ флаш съдържание. Започвам да си мисля, че това е грешка във флаш или 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