Вот моя текущая ситуация:
У меня есть веб-страница, содержащая пару прокручиваемых div. Каждый из этих div содержит ряд объектов. Я использую YUI для отображения всплывающих меню действий, которые можно выполнять над каждым объектом. Каждый объект имеет свое собственное меню, связанное с ним, которое создается и отображается динамически. Всплывающие меню могут быть большими и перекрывать границы прокручиваемого элемента div.
Из того, что я считаю проблемами с фокусом (меню должно быть доступно), когда я навожу указатель мыши на действие, которое находится поверх края прокручиваемого элемента div, элемент div автоматически прокручивается, перемещая содержимое, но оставляя меню неподвижным. Попытка динамически перемещать меню, когда это происходит, — это не то, что я хочу делать, поскольку я считаю, что это приведет к плохому взаимодействию с пользователем.
Поэтому мне нужно, чтобы это сфокусированное меню не прокручивало div. Моя идея предоставить лучший пользовательский интерфейс состоит в том, чтобы предотвратить прокрутку этих внутренних элементов div при открытом меню. Это оставляет меню в оптимальном месте, чтобы показать пользователю, с каким элементом он работает. Если пользователь хочет прокрутить окно, он может щелкнуть, чтобы закрыть меню, а затем прокрутить его в обычном режиме.
Как я могу это сделать? Мне нужно решение, которое работает в основных браузерах.
Моей первой мыслью было прослушать событие onscroll для этого конкретного элемента. К сожалению, кажется, что нет простого способа просто предотвратить прокрутку. Во-первых, мой код события Javascript, кажется, выполняется после того, как произошла фактическая прокрутка.
Затем я подумал, что, поскольку мой код запускается после прокрутки объекта, я могу просто сбросить obj.scrollTop и obj.scrollLeft. Конечно, похоже, это работает, хотя я беспокоюсь, что в медленных браузерах пользователь увидит, что содержимое внутри div «прыгает». Кроме того, было бы очень хорошо, если бы величина прокрутки элемента была частью объекта события. Он где-то там застрял? Я ищу альтернативу необходимости хранить переменные scrollTop и scrollLeft для этого элемента, а затем использовать их, пока прокрутка временно отключена.
Каков наилучший способ решить всю эту проблему?