Воспроизводится при использовании совместно с плагином jquery-mousewheel.
См. https://jsfiddle.net/4Lba076o/
В Chrome прокрутка в порядке.
В Firefox это очень медленно (1px).
По сути, поведение колесика мыши не использует event.deltaFactor (что, однако, нестандартно).
В Firefox jquery-mousewheel преобразует событие из {deltaY: -42} в {deltaY: -1, deltaFactor: 42}
У меня была такая же проблема, но я думаю, что это не имеет ничего общего с колесиком мыши.
Я обнаружил, что Firefox использует deltaMode, равный 1, что означает прокрутку каждой строки. Таким образом, дельта, равная 3, означает 3 строки вместо пикселей.
Я взломал это в selected.jquery.js, и прокрутка стала намного быстрее:
Chosen.prototype.search_results_mousewheel = function(evt) {
/** Added the factor var and set it's value to 16 when scrolling is line scrolling */
var delta, factor;
if (evt.originalEvent) {
factor = evt.originalEvent.deltaMode === 1 /** DOM_DELTA_LINE */ ? 16 : 1;
delta = factor * evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail;
}
if (delta != null) {
evt.preventDefault();
if (evt.type === 'DOMMouseScroll') {
delta = delta * 40;
}
return this.search_results.scrollTop(delta + this.search_results.scrollTop());
}
};
Патч, предложенный storman, у нас отлично работает. Планируется ли публикация в будущем релизе?
@storeman , вы можете открыть запрос на включение с вашим патчем?
Я не знаю coffeescript или как его скомпилировать/протестировать с помощью grunt. Я сделал исправление, которое, по моему мнению, должно работать, но я не могу проверить его, поэтому я не хочу создавать запрос на вытягивание. Мое исправление в coffeescript можно найти здесь:
https://github.com/tioga-tours/chosen/tree/faster-firefox-scroll
@storeman
На самом деле он имеет прямую связь с jquery mousewheel, потому что, если у вас есть оба плагина, jquery mousewheel преобразует события мыши, как я уже упоминал. Без jquery поведение прокрутки колесика мыши прекрасно работает в FF.
Итак, как я это исправил без изменения исходного кода обоих плагинов - я просто делаю $(..).unmousewheel() в местах для каждого регистра .chosen(); Для этого можно написать простой плагин :)
Если исправить это так, как вы сделали здесь
factor = evt.originalEvent.deltaMode === 1 /** DOM_DELTA_LINE */ ? 16 : 1;
то я бы изменил его на
factor = evt.originalEvent.deltaFactor || 1;
Самый полезный комментарий
У меня была такая же проблема, но я думаю, что это не имеет ничего общего с колесиком мыши.
Я обнаружил, что Firefox использует deltaMode, равный 1, что означает прокрутку каждой строки. Таким образом, дельта, равная 3, означает 3 строки вместо пикселей.
Я взломал это в selected.jquery.js, и прокрутка стала намного быстрее: