Chosen: يتم إبطاء تمرير العجلة في FireFox بالتزامن مع المكوّن الإضافي jquery-mousewheel

تم إنشاؤها على ١ يونيو ٢٠١٧  ·  5تعليقات  ·  مصدر: harvesthq/chosen

يتم إنتاجه عند استخدامه بالاقتران مع المكوِّن الإضافي jquery-mousewheel.

انظر https://jsfiddle.net/4Lba076o/

في Chrome التمرير على ما يرام.
في Firefox ، يكون الأمر بطيئًا جدًا (1 بكسل).

بشكل أساسي ، لا يستخدم سلوك عجلة الماوس event.deltaFactor (وهو أمر غير قياسي مع ذلك).
في Firefox jquery-mousewheel يحول الحدث من {deltaY: -42} إلى {deltaY: -1، deltaFactor: 42}

التعليق الأكثر فائدة

كان لدي نفس المشكلة ، ولكن لا علاقة له بعجلة الماوس على ما أعتقد.

لقد وجدت أن Firefox يستخدم deltaMode من 1 ، والذي يتم تمريره لكل سطر. لذا فإن دلتا 3 تعني 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 تعني 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 هل يمكنك فتح طلب سحب مع الباتش الخاص بك؟

لا أعرف فن القهوة أو كيفية تجميعها / اختبارها بنخر. لقد أجريت إصلاحًا أعتقد أنه يجب أن يعمل ، لكنني غير قادر على اختباره ، لذلك لا أريد إنشاء طلب سحب. يمكن العثور على الإصلاح الخاص بي في القهوة هنا:
https://github.com/tioga-tours/chosen/tree/faster-firefox-scroll

تضمين التغريدة
في الواقع ، له اتصال مباشر بـ 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 التقييمات

القضايا ذات الصلة

eduardokranz picture eduardokranz  ·  6تعليقات

ali1360 picture ali1360  ·  5تعليقات

alexfrancavilla picture alexfrancavilla  ·  9تعليقات

piercemcgeough picture piercemcgeough  ·  5تعليقات

Scalamoosh picture Scalamoosh  ·  8تعليقات