Chosen: Le défilement de la roue doit ralentir dans FireFox en conjonction avec le plugin jquery-mousewheel

Créé le 1 juin 2017  ·  5Commentaires  ·  Source: harvesthq/chosen

Est reproduit lors de l'utilisation en conjonction avec le plugin jquery-mousewheel.

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

Dans Chrome, le défilement est OK.
Dans Firefox, c'est très lent (1px).

Fondamentalement, le comportement de la molette de la souris n'utilise pas event.deltaFactor (qui n'est cependant pas standard).
Dans Firefox, jquery-mousewheel transforme l'événement de {deltaY : -42} en {deltaY : -1, deltaFactor : 42}

Commentaire le plus utile

J'ai eu le même problème, mais cela n'a rien à voir avec la molette de la souris, je pense.

J'ai trouvé que Firefox utilise un deltaMode de 1, qui fait défiler par ligne. Ainsi, un delta de 3 signifie 3 lignes au lieu de pixels.

J'ai piraté ceci dans le selected.jquery.js et cela a rendu le défilement beaucoup plus rapide:

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

Tous les 5 commentaires

J'ai eu le même problème, mais cela n'a rien à voir avec la molette de la souris, je pense.

J'ai trouvé que Firefox utilise un deltaMode de 1, qui fait défiler par ligne. Ainsi, un delta de 3 signifie 3 lignes au lieu de pixels.

J'ai piraté ceci dans le selected.jquery.js et cela a rendu le défilement beaucoup plus rapide:

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

Le patch proposé par storman nous convient parfaitement. Est-il prévu de le publier dans une prochaine version ?

@storeman peux-tu ouvrir une pull request avec ton patch ?

Je ne connais pas coffeescript ou comment le compiler/tester avec grunt. J'ai fait un correctif qui, je pense, devrait fonctionner, mais je ne parviens pas à le tester, donc je ne veux pas créer de demande d'extraction. Mon correctif dans coffeescript peut être trouvé ici:
https://github.com/tioga-tours/chosen/tree/faster-firefox-scroll

@storeman
En fait, il a une connexion directe à jquery mousewheel, car si vous avez les deux plugins, jquery mousewheel transforme les événements de souris comme je l'ai mentionné. Sans jquery, le comportement de défilement de la molette de la souris est très bien dans FF.

Alors, comment j'ai corrigé cela sans modifier le code source des deux plugins - je fais juste $(..).unmousewheel() à des endroits pour chaque registre que j'ai .chosen(); On pourrait écrire un plugin simple pour ça :)

Si vous corrigez cela comme vous l'avez fait ici
factor = evt.originalEvent.deltaMode === 1 /** DOM_DELTA_LINE */ ? 16 : 1;
alors je le changerais pour
factor = evt.originalEvent.deltaFactor || 1;

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

alexfrancavilla picture alexfrancavilla  ·  9Commentaires

zerocrates picture zerocrates  ·  7Commentaires

blankhang picture blankhang  ·  7Commentaires

vpode picture vpode  ·  5Commentaires

eduardokranz picture eduardokranz  ·  6Commentaires