Chosen: El desplazamiento de la rueda es lento en FireFox junto con el complemento jquery-mousewheel

Creado en 1 jun. 2017  ·  5Comentarios  ·  Fuente: harvesthq/chosen

Se reproduce cuando se usa junto con el complemento jquery-mousewheel.

Ver https://jsfiddle.net/4Lba076o/

En Chrome, el desplazamiento está bien.
En Firefox es muy lento (1px).

Básicamente, el comportamiento de la rueda del mouse no utiliza event.deltaFactor (que, sin embargo, no es estándar).
En Firefox, jquery-mousewheel transforma el evento de {deltaY: -42} a {deltaY: -1, deltaFactor: 42}

Comentario más útil

Tuve el mismo problema, pero creo que no tiene nada que ver con la rueda del mouse.

Descubrí que Firefox usa un deltaMode de 1, que es desplazamiento por línea. Entonces, un delta de 3 significa 3 líneas en lugar de píxeles.

Hackeé esto en el elegido.jquery.js e hizo que el desplazamiento fuera mucho más rápido:

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

Todos 5 comentarios

Tuve el mismo problema, pero creo que no tiene nada que ver con la rueda del mouse.

Descubrí que Firefox usa un deltaMode de 1, que es desplazamiento por línea. Entonces, un delta de 3 significa 3 líneas en lugar de píxeles.

Hackeé esto en el elegido.jquery.js e hizo que el desplazamiento fuera mucho más rápido:

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

El parche propuesto por storman nos funciona a la perfección. ¿Está previsto que se publique en una versión futura?

@storeman , ¿puedes abrir una solicitud de extracción con tu parche?

No sé coffeescript o cómo compilarlo/probarlo con gruñido. Hice una solución que creo que debería funcionar, pero no puedo probarla, así que no quiero crear una solicitud de extracción. Mi solución en coffeescript se puede encontrar aquí:
https://github.com/tioga-tours/chosen/tree/faster-firefox-scroll

@storeman
En realidad, tiene una conexión directa con jquery mousewheel, porque si tiene ambos complementos, jquery mousewheel transforma los eventos del mouse como mencioné. Sin jquery, el comportamiento de desplazamiento de la rueda del mouse está bien en FF.

Entonces, ¿cómo arreglé eso sin modificar el código fuente de ambos complementos? Simplemente hago $(...).unmousewheel() en lugares para cada registro .chosen(); Uno podría escribir un complemento simple para eso :)

Si arregla eso de la forma en que lo hizo aquí
factor = evt.originalEvent.deltaMode === 1 /** DOM_DELTA_LINE */ ? 16 : 1;
entonces lo cambiaría a
factor = evt.originalEvent.deltaFactor || 1;

¿Fue útil esta página
0 / 5 - 0 calificaciones