Как обнаружить событие event.what в слушателях mousemove?

Chrome, кажется, имеет event.which === 1 в прослушивателе mousemove, если левая кнопка мыши в настоящее время нажата во время события перемещения.

Но Firefox этого не делает; он устанавливает только event.which в mousedown и mouseup. Я не знаю о других браузерах.

Может ли кто-нибудь придумать хороший способ обнаружения такого поведения?

Примечание. Я знаю, что вы можете взломать его, используя слушатели mousedown и mouseup для обновления переменной mouseIsPressed, но это не очень хороший хак в моей ситуации (взаимодействие перетаскивания внутри окна iframe, т.е. нет способа поймать mouseup, если это происходит снаружи iframe), поэтому я хочу использовать родной event.which там, где он доступен.


person callum    schedule 21.07.2014    source источник


Ответы (1)


Уровень 3 DOM определяет MouseEvent#buttons , который поддерживает Firefox. Из статьи MDN о mousemove:

Кнопки, нажимаемые при запуске события мыши: левая кнопка = 1, правая кнопка = 2, средняя кнопка (колесико) = 4, 4-я кнопка (обычно кнопка «Назад в браузере») = 8, 5-я кнопка (обычно «браузер Кнопка «Вперед»)=16. Если нажаты две или более кнопок, возвращает логическую сумму значений. Например, если нажаты кнопки «Влево» и «Вправо», возвращается 3 (= 1 | 2).

person Ry-♦    schedule 21.07.2014
comment
о хорошо это хорошо. а как насчет других браузеров? есть ли способ протестировать любой браузер, чтобы узнать, поддерживает ли он эту спецификацию? конкретно event.what на mousemove? проблема в том, что мне нужно заранее знать, поддерживается ли это, так как ответ на этот вопрос повлияет на то, что я делаю в mousedown, чтобы настроить взаимодействие перетаскивания. - person callum; 24.07.2014
comment
@callum: вы можете проверить стандартную поддержку, используя document.createEvent && 'buttons' in document.createEvent('MouseEvent'). Однако which не является стандартным, и вам просто нужно протестировать его самостоятельно и посмотреть, приемлемо ли его покрытие для вас. - person Ry-♦; 24.07.2014