Javascript: не останавливать прокрутку окна, если курсор проходит над прокручиваемым div

Я создаю веб-приложение, которое имеет сетку из множества небольших прокручиваемых элементов div (на самом деле, редакторы Ace) и в этой сетке достаточно элементов, чтобы она была больше окна. Когда пользователь начинает прокручивать пустое пространство, я хочу, чтобы он прокручивал само окно; когда пользователь начинает прокручивать элемент сетки, я хочу, чтобы он прокручивал там содержимое div. Дело в том, что если пользователь начинает прокручивать пустое пространство, а затем прокручивает так, что его мышь проходит по элементу сетки, этот прокручиваемый div захватывает все события прокрутки, прерывая поток пользователя по сетке и «захватывая» их внутри сетки. элемент.

Я не могу вручную захватывать события onmousewheel, так как, насколько мне известно, невозможно зафиксировать горизонтальное движение колесика мыши отдельно от вертикального, и я хочу, чтобы пользователи Mac OS X могли прокручивать во всех направлениях. Я думал об использовании JS для добавления невидимого div с очень высоким z-индексом в первое событие onscroll и его удаления, как только события onscroll не запускаются в течение определенного периода времени. Еще не закодировал это, но мне интересно, есть ли лучшее решение или есть ли какие-то потенциальные ловушки, о которых я не подумал. Любая помощь или совет были бы замечательными! Спасибо!


person btown    schedule 14.07.2011    source источник
comment
Это раздражает, но обходные пути гораздо более ненадежны. Это также изменяет стандартное поведение, которое, ИМХО, никогда не бывает хорошим.   -  person Mrchief    schedule 14.07.2011


Ответы (1)


Я думаю, что решение для этого было бы невероятно сложным из-за поддержки браузера и фактического решения, которое, вероятно, будет чем-то вроде вычисления прокрутки, возврата div и применения прокрутки к странице.

Вы можете сделать что-то вроде этого:

$('div').scroll(function(e){
    // figure out how much it has scrolled
    window.scrollBy(0,howmuch);
});

Я ни в малейшей степени не рекомендую это решение, я думаю, что лучшим вариантом было бы установить для div значение overflow:hidden; и выберите надежный плагин прокрутки и используйте его для настройки поведения прокрутки в div.

person Jesse    schedule 14.07.2011