Chosen: Wheel Scrolling melambat di FireFox bersama dengan plugin jquery-mousewheel

Dibuat pada 1 Jun 2017  ·  5Komentar  ·  Sumber: harvesthq/chosen

Direproduksi saat digunakan bersama dengan plugin jquery-mousewheel.

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

Di Chrome, pengguliran OK.
Di Firefox sangat lambat (1px).

Pada dasarnya, perilaku roda mouse tidak menggunakan event.deltaFactor (yang merupakan non-standar).
Di Firefox jquery-mousewheel mengubah acara dari {deltaY: -42} menjadi {deltaY: -1, deltaFactor: 42}

Komentar yang paling membantu

Saya memiliki masalah yang sama, tetapi saya pikir itu tidak ada hubungannya dengan roda mouse.

Saya menemukan bahwa Firefox menggunakan deltaMode 1, yaitu gulir per baris. Jadi delta 3 berarti 3 garis, bukan piksel.

Saya meretas ini ke selected.jquery.js dan itu membuat pengguliran jauh lebih cepat:

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

Semua 5 komentar

Saya memiliki masalah yang sama, tetapi saya pikir itu tidak ada hubungannya dengan roda mouse.

Saya menemukan bahwa Firefox menggunakan deltaMode 1, yaitu gulir per baris. Jadi delta 3 berarti 3 garis, bukan piksel.

Saya meretas ini ke selected.jquery.js dan itu membuat pengguliran jauh lebih cepat:

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

Patch yang diusulkan oleh storman bekerja dengan sempurna untuk kami. Apakah itu direncanakan untuk diterbitkan dalam rilis mendatang?

@storeman dapatkah Anda membuka permintaan tarik dengan tambalan Anda?

Saya tidak tahu coffeescript atau cara mengkompilasi/mengujinya dengan grunt. Saya telah melakukan perbaikan yang menurut saya harus berhasil, tetapi saya tidak dapat mengujinya, jadi saya tidak ingin membuat permintaan tarik. Perbaikan saya di coffeescript dapat ditemukan di sini:
https://github.com/tioga-tours/chosen/tree/faster-firefox-scroll

@penjual
Sebenarnya ini memiliki koneksi langsung ke roda mouse jquery, karena jika Anda memiliki kedua plugin, roda mouse jquery mengubah peristiwa mouse seperti yang saya sebutkan. Tanpa jquery, perilaku gulir roda mouse baik-baik saja di FF.

Jadi bagaimana saya memperbaikinya tanpa mengubah kode sumber dari kedua plugin - saya hanya melakukan $(..).unmousewheel() di tempat untuk setiap saya mendaftar .chosen(); Seseorang dapat menulis plugin sederhana untuk itu :)

Jika memperbaikinya seperti yang Anda lakukan di sini
factor = evt.originalEvent.deltaMode === 1 /** DOM_DELTA_LINE */ ? 16 : 1;
maka saya akan mengubahnya menjadi
factor = evt.originalEvent.deltaFactor || 1;

Apakah halaman ini membantu?
0 / 5 - 0 peringkat