Как правильно определить дельты движений мыши за пределами экрана в XUL?
Для созданного мною расширения SlyZoom я хочу реализовать виртуальный слайдер: элемент XUL/XBL, который действует как небольшая статическая область, где на mousedown
указатель мыши изменится на ew-resize
и я захватить mousemove
события для обнаружения горизонтального движения, для изменения текущего уровня масштабирования.
До сих пор я реализовал пробное решение, используя стандартный MouseEvent API и очень удобный MouseEvent.mozMovementX, который, кажется, присутствует даже тогда, когда я не использую API Pointer Lock.
В этом примере изображения вы видите (Xubuntu) ew-resize
указатель мыши над временным виртуальным ползунком, который является областью, с маленькой черной двойной стрелкой за указателем мыши в левой части <menulist>
:
Правая сторона этого изображения - правый край экрана;левая сторона просто обрезана.
Однако, как вы можете видеть / представлять, весьма вероятно, что указатель мыши будет регулярно достигать края экранов пользователей, прежде чем они достигнут удовлетворительного уровня масштабирования. В этих случаях, к сожалению,MouseEvent.mozMovementX
будет просто оставаться нулевым, даже если физическое указательное устройство все еще движется.
Я пытался обойти это с помощью API блокировки указателя. Однако создается впечатление, что API блокировки указателя не работает для документов XUL/XBL. Это верно? Или API-интерфейс Pointer Lock должен работать и для документов XUL/XBL?
В любом случае, даже если бы API-интерфейс Pointer Lock работал для моего элемента XBL, он бы скрывал указатель мыши, а это нежелательно. Хотя я полагаю, что в этом случае я мог бы попытаться создать указатель искусственной мыши, но, боюсь, это довольно громоздко и склонно к ошибочному поведению.
Итак, мой вопрос сводится к следующему:
Как правильно определить дельты перемещения мыши за края экрана в документах XUL/XBL? Возможно ли это как-нибудь?