На данный момент решил проблему так:
Посмотрел чему равен
e.originalEvent.wheelDelta
, при прослушке
mousewheel
.
При скролле на тачпаде значение быстро нарастает от 3 до неопределенного числа (в зависимости от силы толчка - может быть сотня, может 400, может больше, может меньше). Далее начинает медленно затухать так же до 3. Меньше 3 оно никогда не равно.
Покумекал, прикинул, потестил и выяснил, что для моего скрипта оптимально будет реагировать на модуль дельты (
Math.abs(e.originalEvent.wheelDelta)
) больше 25 - таким образом медленно затухающая инерция после прошествия 1000мс (минимальное время на скролл в моем скрипте) уже будет игнорироваться, как и совсем слабые (случайные) толчки.
Правда, не знаю как мышь генерирует эту дельту и что там получится.
UPD: Решил переделать и придумал такую логику:
При каждом вызове
mousewheel
сравниваю значение
e.originalEvent.wheelDelta
с прошлым значением
$(document).on('mousewheel', function (e) {
e.preventDefault();
// действо происходит в методе класса, it === this
// (в каждом методе создаю переменную it, равную this - для удобства)
// it.scrollDelta - свойство класса - изначально равно null
if ( Math.abs(e.originalEvent.wheelDelta) > it.scrollDelta ) {
console.log('New Event');
// т.к. условно это новое событие, то мы вызываем нужные нам скрипты
// проблемка только в том, что сначала по нарастающей идет постоянный вызов,
// но у меня он игнорируется за счет блокирования скрипта на время анимации;
// эту проблему можно решить, вызывая "новое событие" только первый раз,
// а дальше вызывать его только после начала затухания
}
it.scrollDelta = Math.abs(e.originalEvent.wheelDelta);
});
PS: Остается только придумать, как различать здесь мышь и тачпад, ведь у мыши то, скорее всего, дельта будет всегда одинаковой (кто-то может замерить как мышь себя ведет?)