Panzoom: قرصة التكبير / التصغير مكسورة في Chrome v55.02883.91 على الهاتف المحمول

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

موضوع القضية

تكبير القرص مكسورًا في Chrome v55.02883.91 على Mobile و Android System WebView v55.02883.91
ينطبق هذا على أجهزة Android المحمولة التي تستخدم Chrome (المتصفح) وتطبيقات كوردوفا التي تستخدم نظام Android WebView.

بيئتك

  • jquery.panzoom.min.js 3.2.2
  • jquery-1.11.1.min.js (لتطبيقات كوردوفا الخاصة بي) لكن موقع الويب التجريبي لا يعمل أيضًا.
  • Chrome مكسور (انظر الإصدار أعلاه). لا يزال يعمل باستخدام "الإنترنت" كمتصفح على هواتف Samsung.

خطوات التكاثر

  1. احصل على Samsung Galaxy S6 Edge + (أو ما يعادله)
  2. قم بترقية Chrome و / أو WebView لنظام Android إلى الإصدار 55 وما إلى ذلك.
  3. تحميل في الصفحة التجريبية
  4. حاول تكبير النمر - لقد كسرت رفيقة!

سلوك متوقع

في الإصدار السابق من Chrome (حتى الإصدار 54 ، كان يعمل بشكل مثالي ، أي التكبير!

السلوك الفعلي

ما يحدث في الإصدار 55 هو كل ما تحصل عليه هو المقلاة ، وليس التكبير / التصغير والصورة التي يتم تحريكها أحيانًا "تقفز" بين أصابع الضغط وتخلق تأثيرًا وامضًا حيث تنقلب الصورة بين إصبعيك.

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

حصل اختراق سريع في الكود والتعليق على السطر 1164:

this.panning = true;
يسمح لي بالتكبير / التصغير مرة أخرى (ولا يؤثر على التحريك). لا أستطيع أن أرى المكان الذي يتم فيه تعيين this.panning على false إلا عند التهيئة ... YMMV.

ال 20 كومينتر

شكرا للإبلاغ عن هذه المشكلة. في لحظة واحدة توقف تطبيقي عن العمل على التكبير ولا أعرف السبب.

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

شكرا لفتح هذه القضية.
توقف تطبيقي عن العمل أيضًا على سطح مكتب Chrome لهذا السبب.

الحل - إضافة
touch-action: none;
إلى css لحاوية panzoom ولن ينفذ المستعرض أحداث اللمس الخاصة به لهذا المكون.

إنه شيء جديد: https://developers.google.com/web/updates/2016/10/pointer-events

الحل - إضافة
اللمس العمل: لا شيء ؛
إلى css لحاوية panzoom ولن ينفذ المستعرض أحداث اللمس الخاصة به لهذا المكون.

إنه شيء جديد: https://developers.google.com/web/updates/2016/10/pointer-events

لا يعمل.

حصل اختراق سريع في الكود والتعليق على السطر 1164:

this.panning = true;
يسمح لي بالتكبير / التصغير مرة أخرى (ولا يؤثر على التحريك). لا أستطيع أن أرى المكان الذي يتم فيه تعيين this.panning على false إلا عند التهيئة ... YMMV.

حصل اختراق سريع في الكود والتعليق على السطر 1164:
this.panning = صحيح ؛
يسمح لي بالتكبير / التصغير مرة أخرى (ولا يؤثر على التحريك). لا أستطيع أن أرى المكان الذي يتم فيه تعيين this.panning على false إلا عند التهيئة ... YMMV.

شكرا لك ، يعمل لأجلي!

حصل اختراق سريع في الكود والتعليق على السطر 1164:
this.panning = صحيح ؛

Womp هناك .....

هذا "الاختراق" هو ​​الحيلة! يعمل الآن على android 55

أعيد اختباره على iOS 10.2 و Android 53 - لا يزال يعمل كما كان من قبل!

شكرا vrtual!

حصل اختراق سريع في الكود والتعليق على السطر 1164:
this.panning = صحيح ؛
يسمح لي بالتكبير / التصغير مرة أخرى (ولا يؤثر على التحريك). لا أستطيع أن أرى أين يتم تعيين this.panning إلى> خطأ إلا عند التهيئة ... YMMV.

يعمل بشكل جيد بالنسبة لي ... شكرا يا رجل
أنا أقوم بوظيفة التكبير / التصغير الخاصة بي ، لكن هذا يوفر لي الآن ... شكرًا لك

تم اختباره على android google webview 2016 تحديث 14 ديسمبر ...

حصل اختراق سريع في الكود والتعليق على السطر 1164:
this.panning = صحيح ؛

هذا يعمل جزئيا. شكرا!

لقد حققت نجاحًا جزئيًا في التعليق على هذا السطر ، والآن يتم تكبيره من أعلى اليسار بدلاً من موقع التفاعل ، لكن هذا تحسن كبير.

يبدو أنه تم تغيير أحدث إصدار من Chrome حيث يوجد مرجع pageX و pageY في الحدث.
حتى تغير هذا الكروم ، كانت جميع المتصفحات في event.pageX ....
الآن يجلس في event.originalEvent.pageX ...

أنا جزء من الطريق خلال تجاوز كود panzoom. لجعله يعمل على الكروم باستخدام أحداث الماوس ، قم بتغيير هذه الأسطر:
السطر 1191: 1192
تغيير من:
startPageX = event.pageX; startPageY = event.pageY;
ل:
if (typeof event.pageX === 'undefined'){ startPageX = event.originalEvent.pageX; startPageY = event.originalEvent.pageY; }else{ startPageX = event.pageX; startPageY = event.pageY; }
في السطر 1232 أضف:
if (typeof coords.pageX === 'undefined'){ coords['pageX'] = coords.originalEvent.pageX; coords['pageY'] = coords.originalEvent.pageY; }

المزيد قادم من أجل أحداث اللمس أثناء مرورها بها.

التعليق خارج "this.panning = true؛" يعمل على إصلاحه ولكن الأمر لم يعد بهذه السلاسة بعد الآن وعلى الأجهزة القديمة ، يصبح التكبير / التصغير بطيئًا للغاية. أفترض أن التعليق عليه يستخدم طاقة أكثر بكثير من وحدة المعالجة المركزية وبالتالي لا تستطيع الأجهزة القديمة مواكبة ذلك.

هل حاولت التحديث إلى الإصدار الجديد (3.2.2) والتعليق على السطر المعطى؟

يمكنني أن أؤكد أن هذا الخطأ لا يزال موجودًا (وأن الإصلاح يعمل) في الإصدار 3.2.2 و Chrome 56.

لست متأكدًا بنسبة 100٪ ، ولكن هذا ما أعتقد أن المشكلة تكمن فيه:
يبدو أن هذا المتغير ( this.panning ) يهدف إلى منع تشغيل أكثر من مثيل للدالة _startMove نفس الوقت. من المفترض أن تتم إعادة تعيينه إلى false في حدث endEvent (السطر 1249) ، لكن أعتقد أن هذا لا يعمل بشكل صحيح (لم أتعمق بالقدر الكافي لمعرفة السبب). قد يكون هذا هو سبب اكتشاف ThorConzales أن الإصلاح يتسبب في انخفاض الأداء.

إصلاح بديل: لقد اكتشفت أن إضافة this.panning = false; في نهاية الوظيفة _startMove (بعد السطر 1255) يحل هذه المشكلة أيضًا. لم أختبر على الأجهزة القديمة ، لذا لا يمكنني تأكيد ما إذا كان هذا يساعد في فقدان الأداء ، ولكن إذا كان شخص آخر قد أقدر ذلك.

شكرا JamesCatt سيحاول البديل الخاص بك.

تضمين التغريدة

JamesCatt ، لم يعمل الإصلاح البديل بالنسبة لي وتم كسر التكبير مرة أخرى (أبلغ عنه أحد المستخدمين لأنني لا أملك جهازًا لاختبار نفسي).

سطر التعليق 1164 (this.panning = true) لا يعمل بالنسبة لي. لقد خدعت في السطر 1143 أن التغيير moveEvent = 'pointermove' tomoveEvent = 'touchmove' ، ثم يعمل ، ولست متأكدًا مما إذا كان سيتسبب في أي مشاكل أخرى.

لقد وجدت اختراق لحل هذه المشكلة.

يجب علينا تعيين options.which إلى -1 عند التهيئة.

$("a.panzoom-elements").panzoom({
  which: -1,
});

__تحذير__
يعمل هذا الاختراق مع جهاز يعمل باللمس فقط. ربما هذا لا يعمل مع الماوس.

لم يعمل بديل JamesCatt بالنسبة لي. يقوم اختراقhshiozawa ، على الأقل على Pixel ، بتشغيل Android 7.1.2

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