Ответ 1
-
DOMMouseWheel
событие в Firefox имеет свойствоaxis
. -
Событие
mousewheel
в Chrome имеетwheelDeltaX
иwheelDeltaY
. -
К сожалению, я не могу найти эквивалент для событий IE (тестирование на IE9).
Я знаю, что можно обнаружить вверх и вниз, например.
function handle(delta) {
if (delta < 0) {
alert('down');
} else {
alert('up');
}
}
function wheel(event){
var delta = 0;
if (!event) event = window.event;
if (event.wheelDelta) {
delta = event.wheelDelta/120;
} else if (event.detail) {
delta = -event.detail/3;
}
if (delta)
handle(delta);
if (event.preventDefault)
event.preventDefault();
event.returnValue = false;
}
/* Initialization code. */
if (window.addEventListener)
window.addEventListener('DOMMouseScroll', wheel, false);
window.onmousewheel = document.onmousewheel = wheel;
Но есть ли способ определить, поместилась ли мышь мыши влево или вправо с помощью мыши?
DOMMouseWheel
событие в Firefox имеет свойство axis
.
Событие mousewheel
в Chrome имеет wheelDeltaX
и wheelDeltaY
.
К сожалению, я не могу найти эквивалент для событий IE (тестирование на IE9).
Internet Explorer. В IE9 и IE10 вам нужно использовать событие onwheel
(а не onmousewheel или DOMMouseScroll) с помощью addEventListener
, чтобы иметь возможность обнаруживать горизонтальную прокрутку колес из DOM, Используйте значение event.deltaX
вместе со значением event.deltaMode
для определения горизонтального перемещения мыши (для вертикального вращения используйте значение event.deltaY
). Для <= IE8 используйте событие onmousewheel
и event.wheelDelta
(для старых версий IE поддерживаются только мышиные манипуляции yaxis).
Blink/Webkit: поддержка с Chrome 31/Safari 7 для события onwheel. В противном случае используйте события onmousewheel
и свойства event.wheelDeltaX
и event.wheelDeltaY
. Хром /Safari только трюк: с помощью клавиши SHIFT, в то время как прокрутки мыши влево/вправо (полезно для тестирования).
Firefox: Firefox 17 и выше поддерживает событие onwheel. Для поддержки старых версий Firefox (обратно до 3.6) используйте устаревшие свойства DOMMouseScroll
и event.axis и event.detail для поддержки горизонтальной прокрутки. (Firefox mobile: документы подразумевают, что событие onwheel будет срабатывать при панорамировании с помощью сенсорного устройства. Я не пробовал.). В Firefox также есть событие MozMousePixelScroll
. Документация MDN также предлагает предлагаемый код для обработки различных событий в браузерах. Firefox также имеет конфигурацию mousewheel.enable_pixel_scrolling, которая может влиять на все различные события колеса.
Попробуйте собственное событие outwheel с помощью тестера колесных событий от QuirksMode. Я видел, как это работает с IE9 на Win7 и IE10 в Windows 8 (предварительный просмотр версии, IE версии 10.0.8400.0). Чтобы настроить новое стандартное событие onwheel:
спецификация W3C, Документация Microsoft IE9 для MouseWheel
событие и MDN docs укажите для события onwheel
:
deltaX
- Получает расстояние, которое колесо мыши вращается вокруг оси x (горизонтально).deltaY
- Получает расстояние, которое колесо мыши вращается вокруг оси y (вертикально).deltaZ
- Получает расстояние, которое колесо мыши вращается вокруг оси z.deltaMode
- Возвращает значение, которое указывает единицу измерения для значений дельта:
DOM_DELTA_PIXEL
(0x00) По умолчанию. Дельта измеряется в пикселях.DOM_DELTA_LINE
(0x01) Дельта измеряется в строках текста.DOM_DELTA_PAGE
(0x02) Дельта измеряется на страницах текста.Изменить: убедитесь, что вы не предотвращаете событиеDefault(), если установлено event.ctrlKey
, иначе вы, вероятно, не сможете изменить масштаб страницы. Также, очевидно, для ctrlKey установлено значение true, если вы используете масштабирование на сенсорной панели в Chrome и IE.
Обнаружение функции сложно в IE:
'onwheel' in document
возвращает значение true, но кажется, что ни одно событие не запускается для горизонтального или вертикального события переключения.'onwheel' in document
возвращает false, но работает событие onwheel (я думаю, что document.documentMode === 9
должен быть проверен перед использованием события onwheel в IE9).document.onwheel = 'somefunc(event)'
, похоже, не работает даже в documentMode 9 или 10 (т.е. похоже, что вы можете использовать только addEventListener).Чтобы протестировать, используйте мышь для мыши с титром, прокручиваемую сенсорную панель (жест или зону) или устройство Apple (волшебная мышь или мощный мышиный прокрутка). Играйте с различными настройками мыши или тачпада в окнах (или предпочтениями мыши на OSX, если вы тестируете горизонтальную прокрутку на OSX с помощью Safari).
Знаки дельта-значений имеют противоположный знак для onwheel и onmousewheel для всех браузеров. В IE значения дельта различаются для onwheel и onmousewheel, например (используя мою машину dev с IE9 с помощью стандартной мыши Microsoft):
event.deltaY
был 111 на Win8 или 72 на Win7 для события onwheel
, прокручивающегося на одну ступень. Значение немного меняется с увеличением, но есть и другие факторы, которые я не могу выполнить (размер шрифта не выглядит). event.wheelDelta
составлял -120 для события onmousewheel
, прокручивающего одну метку.
Для Windows XP "Мы должны добавить поддержку сообщения WM_MOUSEHWHEEL
, чтобы эта работа [, поддержка] была добавлена в Vista, поэтому, если вы используете XP, вам необходимо установить IntelliType Pro и/или IntelliPoint" - как в этой статье.
Я считаю, что вы можете найти "горизонтальные" или данные по оси х из
event.originalEvent.wheelDeltaX
Вы должны отладить код и посмотреть, какие свойства имеет объект события во время выполнения. Это должно подтвердить или опровергнуть, существует ли это свойство. Оттуда это просто вопрос определения того, отличается ли значение.
Проверьте принятый ответ для получения дополнительных ссылок и информации.
Событие прокрутки /mousewheel для пузырей
event.detail указывает количество "тиков", перемещаемых колесом мыши.
Положительные значения означают "вниз/вправо", отрицательный вверх/влево.
event.axis указывает ось жестов прокрутки (по горизонтали или по вертикали). Этот атрибут был добавлен в Firefox 3.5
Chrome реализует то же поведение, что и IE AFAIK. В IE и Chrome: используйте e.wheelDeltaX и e.wheelDeltaY
IE поддерживает их все: mousewheel | onmousewheel, которые являются обработчиками событий, а также WheelEvent (предоставляет DeltaX
, DeltaY
, DeltaZ
), который является стандартным событием и MouseWheelEvent
interface, который также поддерживается в IE9 + (с WheelDelta
и количество других x
, y
связанных свойств).
Протестировано в IE11.
Связано: Сегодня, когда стандарт сенсорных событий окончательно оформляется, оказалось, что IE11 уже поддерживал большую часть его: http://blogs.msdn.com/b/ie/archive/2015/02/24/pointer-events-w3c-recommendation-interoperable-touch-and-removing-the-dreaded-300ms-tap-delay.aspx.
Кроме того: @bob_cobb, вы можете вернуться к одобренному вами утверждению в пользу наиболее проголосовавшего с наиболее богатыми подробностями. Это поможет будущему посетителю найти правильную информацию и показать вам даже заботу о сообществе!