Chosen: 滚轮滚动是在 FireFox 中与 jquery-mousewheel 插件一起减慢

创建于 2017-06-01  ·  5评论  ·  资料来源: harvesthq/chosen

与 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());
      }
    };

所有5条评论

我有同样的问题,但我认为它与鼠标滚轮无关。

我发现 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;

此页面是否有帮助?
0 / 5 - 0 等级