Обработка событий мыши за элементом - PullRequest
0 голосов
/ 23 августа 2011

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

В Firefox я исправил это, применяя стиль «pointer-events: none» к призраку, который заставляет событие mousewheel проходить прямо так, как я хочу. Но, похоже, мне нужно другое решение для IE. Я планировал перехватывать события mousewheel на элементе-призраке и перенаправлять их в контейнерный div, но я не могу заставить новое событие вызывать стандартное поведение mousewheel (то есть прокручивать div). Кто-нибудь знает, как мне это сделать?

Вот очень простой пример того, о чем я говорю: http://jsfiddle.net/jqL8Z/3/

Обратите внимание, что при наведении указателя мыши на «Элемент перетаскивания» страница не прокручивается. Это потому, что прокрутка является частью переполнения основного div, в то время как поле перетаскивания не является членом этого div, поэтому его события мыши будут пузыриться до тела. Я не хочу делать его членом div, потому что тогда он становится невидимым при перетаскивании за пределы этого div.

Я попробовал следующий код, чтобы перехватить и перенаправить событие:

textClone.addEvent('mousewheel', function(e) {
        var mouseWheelEvent = document.createEvent('MouseEvents');
        mouseWheelEvent.initMouseEvent('mousewheel', true, true, window, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget);
        treeDiv.dispatchEvent(mouseWheelEvent);
    });

Но не повезло, чего-то еще не хватает.

Ответы [ 2 ]

0 голосов
/ 30 августа 2011

В итоге я изменил логику перетаскивания так, чтобы призрачный div удерживался под мышкой, а не под ней. Таким образом, он не будет перехватывать события мыши.

0 голосов
/ 24 августа 2011

Ответ на событие колеса мыши в div с помощью вызова события колеса мыши на странице может достичь вашей цели.

...