与 jquery-mousewheel 插件结合使用时重现。
见https://jsfiddle.net/4Lba076o/
在 Chrome 中滚动是可以的。
在 Firefox 中它非常慢(1px)。
基本上,鼠标滚轮行为不使用 event.deltaFactor (但是这是非标准的)。
在 Firefox 中 jquery-mousewheel 将事件从 {deltaY: -42} 转换为 {deltaY: -1, deltaFactor: 42}
我有同样的问题,但我认为它与鼠标滚轮无关。
我发现 Firefox 使用的 deltaMode 为 1,即每行滚动。 所以 3 的 delta 表示 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 的 delta 表示 3 行而不是像素。
我将它破解到 selected.jquery.js 中,它使滚动速度更快: