Panzoom: يقوم Panzoom بإخفاء حدث mousedown للعناصر الفرعية على أحدث إصدار من Chrome

تم إنشاؤها على ٧ ديسمبر ٢٠١٦  ·  12تعليقات  ·  مصدر: timmywil/panzoom

لقد استخدمت هذا البرنامج المساعد الرائع مع jquery.draggable لتحريك / تكبير الرسم التخطيطي باستخدام عقد قابلة للسحب ،
ولكن بعد أن تصبح العقد الأخيرة لتحديث Chrome غير قابلة للتجزئة.

أظهر تحقيق صغير أن Chrome غيّر شيئًا ما بحدث المؤشر ،
حتى الآن يستجيب المكون الإضافي panzoom لحدث المؤشر للعقدة الفرعية قبل إطلاق حدث mousedown.
يقوم Panzoom بإيقاف حدث المؤشر ولسبب ما لا يوجد حدث الماوس بعد ذلك ، لذلك لا يبدأ السحب.

jquery.panzoom.js v3.2.2
مسج 3.1.0 أو v1.11.3
jqueryui 1.12.0 أو 1.10.3
Chrome 55.0.2883.75 (64 بت) Ubuntu 16.04

هنا عرض
http://codepen.io/yurigor/pen/yVjeGB

أضفت الخيار "ignoreChildrensEvents" لإصلاح هذه المشكلة
لست متأكدًا من وجوب تقديم طلب سحب مع هذه التغييرات.

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

سررت بالمساعدة!
أي شخص يحتاجها أيضًا ، هنا رابط مباشر:
https://github.com/YuriGor/jquery.panzoom/tree/ignoreChildrensEvents/dist

timmywil ، إذا كنت ترغب في دمج
أبدأ تحميل الكبد
grunt watch:dev
لكنها لا تعمل.
على http: // localhost : 35711 / لدي
{"tinylr":"Welcome","version":"0.2.1"}
وعلى
http: // localhost : 35711 / test / index.html
أو
http: // localhost : 35711 / demo / index.html
أملك
{"error":"not_found","reason":"no such route"}

ال 12 كومينتر

أواجه نفس المشكلة ، chrome v55. لدي نافذة قابلة للسحب ، وأريد الحصول على أحداث موسعة للأطفال. ماذا فعلت لإصلاح هذا؟ هل لديك فرع مع التغيير ، أنا عالق الآن.

وجدت فرعك وهو يعمل على حل مشكلتي بشكل جيد جدًا. شكرا YuriGor هذا رائع

سررت بالمساعدة!
أي شخص يحتاجها أيضًا ، هنا رابط مباشر:
https://github.com/YuriGor/jquery.panzoom/tree/ignoreChildrensEvents/dist

timmywil ، إذا كنت ترغب في دمج
أبدأ تحميل الكبد
grunt watch:dev
لكنها لا تعمل.
على http: // localhost : 35711 / لدي
{"tinylr":"Welcome","version":"0.2.1"}
وعلى
http: // localhost : 35711 / test / index.html
أو
http: // localhost : 35711 / demo / index.html
أملك
{"error":"not_found","reason":"no such route"}

شكرا جزيلا. لم يكن هذا الإصلاح كافيًا بالنسبة لي ولكني أضفت بعضًا منه لإصلاحه لحالتي. (لدي عدة أطفال متداخلين يجب تجاهل بعضهم والبعض الآخر لا ينبغي)

timmywil هل من الممكن إصدار نسخة جديدة مع هذا الخيار؟

تحرير: في الواقع لدي نفس المشكلة مثل romi45. 😞

تحرير 2: خيار لسرد العناصر التي يجب تجاهلها سيكون مفيدًا ، مثل:

ignoreChildEventsFrom: [".things-to-ignore1", ".things-to-ignore2"]

تحرير 3: أعتقد أنني قد وجدت الحل في الأسئلة الشائعة "كيف يمكنني عمل الروابط إذا كانت ضمن عنصر Panzoom؟".

ما أفعله هو التعليق على منع PreventionDefault في السطر 969. سوف يمنع منع منع التخلف من الوصول إلى الأحداث التابعة له.

akhnaz ،

من وجهة نظري ، سيمنع preventDefault الإجراء الافتراضي المرتبط بعنصر (طفل أو عنصر panzoom نفسه) ، وسيوقف stopPropagation الأحداث من الظهور في شكل فقاعات وصولاً إلى العنصر الرئيسي.

يوجد حل بسيط وأنيق في الأسئلة الشائعة:


  1. كيف أجعل الروابط تعمل إذا كانت ضمن عنصر Panzoom؟ مثال
  • يتم إيقاف انتشار الأحداث لأحداث الماوس والبدء باللمس للسماح بعناصر Panzoom داخل عناصر Panzoom. لإصلاح الروابط ، قم بربط معالج الحدث الذي يمنع الحدث من الوصول إلى معالج Panzoom:
$('.panzoom a').on('mousedown touchstart', function( e ) {
  e.stopImmediatePropagation();
});

هذا لا يتطلب أي تغييرات في المكتبة نفسها.

مرحبًا @ glen-84

نعم ، سوف تمنع PreventionDefault الإجراء الافتراضي. ولكن ، سيمنع أيضًا MouseDown من الطفل عند إرسال المؤشر إلى الأسفل والاستماع إليه.

في chrome 55 ، يتم الآن إرسال المؤشر إلى الأسفل وتقوم Microsoft edge بالفعل بتطبيق المؤشر لأسفل من البداية.

في حالتي ، يتم الاستماع إلى panzoom إلى المؤشر لأسفل ، ويستمع الأطفال إلى MouseDown.

هنا هو jsbin الخاص بي من أجله:

https://jsbin.com/yozotuxina/edit؟js

akhnaz ،

يمكنك فقط الاستماع إلى pointerdown على الطفل وإيقاف التكاثر الفوري ...

https://jsbin.com/sicapuledo/edit؟html ، js ، وحدة التحكم ، الإخراج

أهلا،

لقد قمت بتحسين ميزتك قليلاً. لقد تجاوزت خيارك إلى مجموعة محتملة من الصفوف. الهدف هو تجاهل الأحداث فقط إذا كان لدى الأطفال أحد الصفوف المدرجة. بالطبع ، فقط قم بتعيين القيمة على العمل الحقيقي أثناء تنفيذه.

ليس لدي الوقت حقًا للتفرع بشكل صحيح وتقديم طلب سحب. يرجى تضمين هذا التحسين الصغير وطلب السحب إلى المستودع الرئيسي.

هذا هو الكود المحدث من سطور فورك 959:

if (!options.disablePan || !options.disableZoom) {
    events[ str_start ] = function(e) {
        if(options.ignoreChildrensEvents) {
            if($.isArray(options.ignoreChildrensEvents)) {
                if(options.ignoreChildrensEvents.find(function(c){return $(e.target).hasClass(c);})) {
                    return;
                }
            }
            else if(e.target !== this){
                return;
            }
        }

        var touches;
                /* rest of code */

يمكن تعريف خيار ignoreChildrensEvents على أنه صحيح أو خطأ أو ['child-class1'، 'child-class2'].

يعتبر

يرجى إصدار إصدار أحدث يحتوي على ignoreChildrensEvents

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات