Panzoom: Pinch-Zoom in Chrome v55.02883.91 auf MobilgerÀten defekt

Erstellt am 12. Dez. 2016  Â·  20Kommentare  Â·  Quelle: timmywil/panzoom

Thema des Problems

Pinch-Zoom defekt in Chrome v55.02883.91 auf Mobile und Android System WebView v55.02883.91
Dies gilt fĂŒr Android-MobilgerĂ€te, die Chrome (Browser) verwenden, und Cordova-Apps, die Android System WebView verwenden.

Ihre Umgebung

  • jquery.panzoom.min.js 3.2.2
  • jquery-1.11.1.min.js (fĂŒr meine Cordova-Apps) jedoch funktioniert die Demo-Website auch nicht.
  • Chrome defekt (siehe Version oben). Funktioniert immer noch mit "Internet" als Browser auf Samsung-Handys.

Schritte zum Reproduzieren

  1. Holen Sie sich ein Samsung Galaxy S6 Edge + (oder gleichwertig)
  2. Aktualisieren Sie Chrome und/oder Android System WebView auf v55 usw.
  3. Demoseite laden
  4. Versuchen Sie, den Tiger zu vergrĂ¶ĂŸern - sie ist gebrochen, Kumpel!

Erwartetes Verhalten

Auf der vorherigen Version von Chrome (bis v54, funktionierte perfekt, dh vergrĂ¶ĂŸert!

TatsÀchliches Verhalten

Was bei v55 passiert, ist nur das Schwenken, nicht das Zoomen, und das geschwenkte Bild "springt" manchmal zwischen den Fingern und erzeugt einen Blinkeffekt, wenn das Bild zwischen Ihren beiden Fingern gespiegelt wird.

Hilfreichster Kommentar

Hatte einen schnellen Hack im Code und kommentierte Zeile 1164:

this.panning = true;
erlaubt mir wieder Pinch-Zoom (und hat keinen Einfluss auf das Schwenken). Ich kann nicht sehen, wo this.panning auf false gesetzt wird, außer bei der Initialisierung ... YMMV.

Alle 20 Kommentare

Danke, dieses Problem zu melden. In einem Moment funktioniert meine App nicht mehr mit Zoom und ich weiß nicht warum.

Meine App ist auch kaputt gegangen. Seltsames Verhalten bei neu aktualisiertem Chrome (Drag-Ereignisse scheinen das Fenster zu scrollen und Pinch-Ereignisse sind ... bizarr). Anderes GerÀt mit nicht aktualisiertem Chrome funktioniert einwandfrei. Habe das Chrom gestern Abend aktualisiert und es ist auch kaputt gegangen.

Danke, dass Sie dieses Thema geöffnet haben.
Aus diesem Grund funktioniert meine App auch auf dem Chrome-Desktop nicht mehr.

Lösung - hinzufĂŒgen
touch-action: none;
in die CSS Ihres Panzoom-Containers und der Browser fĂŒhrt keine eigenen Touch-Ereignisse fĂŒr diese Komponente aus.

Es ist neu: https://developers.google.com/web/updates/2016/10/pointer-events

Lösung - hinzufĂŒgen
Touch-Aktion: keine;
in die CSS Ihres Panzoom-Containers und der Browser fĂŒhrt keine eigenen Touch-Ereignisse fĂŒr diese Komponente aus.

Es ist neu: https://developers.google.com/web/updates/2016/10/pointer-events

Funktioniert nicht.

Hatte einen schnellen Hack im Code und kommentierte Zeile 1164:

this.panning = true;
erlaubt mir wieder Pinch-Zoom (und hat keinen Einfluss auf das Schwenken). Ich kann nicht sehen, wo this.panning auf false gesetzt wird, außer bei der Initialisierung ... YMMV.

Hatte einen schnellen Hack im Code und kommentierte Zeile 1164:
this.panning = true;
erlaubt mir wieder Pinch-Zoom (und hat keinen Einfluss auf das Schwenken). Ich kann nicht sehen, wo this.panning auf false gesetzt wird, außer bei der Initialisierung ... YMMV.

Danke, funktioniert bei mir!

Hatte einen schnellen Hack im Code und kommentierte Zeile 1164:
this.panning = true;

Wamp, da ist es.....

Dieser "Hack" macht den Trick! Funktioniert jetzt auf Android 55

Erneut getestet auf iOS 10.2, Android 53 - funktioniert immer noch wie zuvor!

Danke virtueller!

Hatte einen schnellen Hack im Code und kommentierte Zeile 1164:
this.panning = true;
erlaubt mir wieder Pinch-Zoom (und hat keinen Einfluss auf das Schwenken). Ich kann nicht sehen, wo this.panning auf >false gesetzt wird, außer bei der Initialisierung ... YMMV.

Funktioniert bei mir gut... danke Mann
Ich mache meine eigene Zoomfunktion, aber das spart mir vorerst... danke

Getestet auf Android Google Webview 2016 Dez 14 Update...

Hatte einen schnellen Hack im Code und kommentierte Zeile 1164:
this.panning = true;

Das funktioniert teilweise. Danke!

Ich habe teilweise Erfolg beim Auskommentieren dieser Zeile, sie zoomt jetzt von oben links anstelle des Interaktionsorts, aber das ist eine enorme Verbesserung.

Anscheinend hat sich das neueste Chrome geÀndert, wo sich die Referenzen pageX und pageY im Event befinden.
Bis zu dieser Chrome-Änderung hatten alle Browser es in event.pageX....
Jetzt sitzt es in event.originalEvent.pageX...

Ich bin gerade dabei, den Panzoom-Code durchzugehen. Damit es in Chrome mithilfe von Mausereignissen funktioniert, Àndern Sie diese Zeilen:
Zeile 1191:1192
Wechsel von:
startPageX = event.pageX; startPageY = event.pageY;
zu:
if (typeof event.pageX === 'undefined'){ startPageX = event.originalEvent.pageX; startPageY = event.originalEvent.pageY; }else{ startPageX = event.pageX; startPageY = event.pageY; }
in Zeile 1232 hinzufĂŒgen:
if (typeof coords.pageX === 'undefined'){ coords['pageX'] = coords.originalEvent.pageX; coords['pageY'] = coords.originalEvent.pageY; }

Mehr zu den BerĂŒhrungsereignissen kommen, wĂ€hrend ich sie durchlaufe.

Auskommentieren "this.panning = true;" behebt es, aber es ist nicht mehr so ​​​​flĂŒssig und auf Ă€lteren GerĂ€ten wird das Zoomen ziemlich verzögert. Ich gehe davon aus, dass das Auskommentieren viel mehr CPU-Leistung verbraucht und Ă€ltere GerĂ€te daher nicht mithalten können.

Haben Sie versucht, auf die neue Version (3.2.2) zu aktualisieren und die angegebene Zeile auskommentiert?

Ich kann bestÀtigen, dass dieser Fehler in v3.2.2 und Chrome 56 noch vorhanden ist (und die Fehlerbehebung funktioniert).

Ich bin mir nicht 100% sicher, aber ich denke, das Problem ist:
Diese Variable ( this.panning ) scheint dem Zweck zu dienen, zu verhindern, dass mehr als eine Instanz der Funktion _startMove gleichzeitig ausgelöst wird. Es soll beim endEvent Ereignis (Zeile 1249) auf false , aber ich denke, das funktioniert nicht richtig (ich habe mich nicht tief genug vertieft, um herauszufinden, warum). Dies kann der Grund sein, warum ThorConzales festgestellt hat, dass die Fehlerbehebung zu einer verringerten Leistung fĂŒhrt.

Alternative Lösung: Ich habe festgestellt, dass das HinzufĂŒgen von this.panning = false; am Ende der Funktion _startMove (nach Zeile 1255) dieses Problem ebenfalls behebt. Ich habe nicht auf Ă€lteren GerĂ€ten getestet, daher kann ich nicht bestĂ€tigen, ob dies beim Leistungsverlust hilft, aber wenn jemand anderes es könnte, wĂ€re ich dankbar.

danke @JamesCatt wird deine Alternative ausprobieren.

@timmywil !?

@JamesCatt der alternative Fix hat bei mir nicht funktioniert und der Zoom war wieder kaputt (von einem Benutzer gemeldet, da ich kein GerÀt habe, um mich selbst zu testen).

Das Kommentieren von Zeile 1164 (this.panning = true) funktioniert bei mir nicht. Ich habe in Zeile 1143 betrogen, dass change moveEvent = 'pointermove' tomoveEvent = 'touchmove' ist, dann funktioniert es, ich bin mir nicht sicher, ob es weitere Probleme verursachen wird.

Ich habe einen Hack gefunden, der dieses Problem löst.

Wir sollten options.which -1 Initialisierung auf

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

__WARNUNG__
Dieser Hack funktioniert nur fĂŒr ein Touch-GerĂ€t. Vielleicht funktioniert das bei einer Maus nicht.

Die Alternative von @ JamesCatt hat bei mir nicht funktioniert. Der Hack von

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen