Javascript события колеса дает противоречивые значения

Я работал над масштабированием с помощью html / javascript / css
Я прикрепил прослушиватель событий wheel к моему тегу div и console.log(event.wheelDelta)
Он прекрасно работает с мышью. console.log дает положительное число, кратное 120, для увеличения и отрицательное в противном случае
введите здесь описание изображения
Проблема связана с сенсорной панелью
введите здесь описание изображения
При увеличении масштаба он не дает согласованных значений. Между ними есть несколько -120. Из-за этого масштабирование очень грубое.
Как добиться плавного масштабирования или как получить согласованные значения wheelDelta с помощью сенсорной панели


person Gaurav Gupta    schedule 14.08.2016    source источник
comment
Может быть, добавить короткий тайм-аут перед отображением?   -  person Jonas Wilms    schedule 14.08.2016


Ответы (2)


event.wheelDelta определяется не во всех браузерах, считается устаревшим и больше не должен использоваться в соответствии с документацию Mozilla. Вы можете использовать значения event.deltaX и event.deltaY. Дополнительную информацию см. в документации по колесу Mozilla.

Я протестировал следующий код в Google Chrome и Mozilla Firefox. Ценности очень разные. Google Chrome всегда возвращает как event.deltaY значение 100 или -100. В Mozilla Firefox он всегда возвращает значения 3 или -3.

document.addEventListener('wheel', function(event) {
    console.log(event.deltaX, event.deltaY);
});

Я бы не стал полагаться на значение колеса, а скорее слушал событие прокрутки, как это описано в Документация прокрутки Mozilla:

var lastKnownScrollPosition = 0;
var ticking = false;

function doSomething(scrollPosition) {
    console.log(scrollPosition);
}

window.addEventListener('scroll', function(e) {
    lastKnownScrollPosition = window.scrollY;
    if(!ticking) {
        window.requestAnimationFrame(function() {
            doSomething(lastKnownScrollPosition);
            ticking = false;
        });
    }
    ticking = true;
});
person ssc-hrep3    schedule 14.08.2016

Используйте event.wheelDeltaY или event.deltaY
console.log(event.wheelDeltaY) для мыши:
введите здесь описание изображения
для сенсорной панели:
введите здесь описание изображения
Вместо -120 это дает 0. -120, которое появляется в колесеДельта, на самом деле является результатом горизонтальной прокрутки (wheelDeltaX). (При попытке увеличить масштаб с помощью сенсорной панели также может быть небольшое движение по горизонтали)
Не масштабирование, когда его 0, и вы получите постоянное плавное масштабирование!

person Gaurav Gupta    schedule 14.08.2016