Gibt es eine Möglichkeit, den Pinch-Zoom in einer electron app zu deaktivieren?
Ich kann es nicht in der Web-Ansicht mit normalen Javascript-Methoden wie hier beschrieben ausführen: https://stackoverflow.com/a/23510108/665261
Es scheint, dass das --disable-pinch
-Flag nicht von Elektron unterstützt wird.
Ich habe mit verschiedenen Methoden experimentiert:
event.preventDefault()
bei Javascript touchmove/mousemove
-Ereignissenmeta viewport
-Tags in HTML-webkit-text-size-adjust
in CSSGibt es eine Methode für Webkit im Allgemeinen oder Elektron im Besonderen?
UPDATE 2:
Verwenden Sie webFrame.setZoomLevelLimits (v0.31.1 +) im render-Prozess ( Unterschiede zwischen Hauptprozess und Renderer-Prozess ). Weil Smart Zoom auf Mac weiterhin mit document.addEventListener funktioniert.
Beispiel require('electron').webFrame.setZoomLevelLimits(1, 1)
UPDATE:
Die deltaY
-Eigenschaft für den Pinch-Zoom hat einen float
-Wert, der normale Scroll-Ereignis gibt jedoch einen int
-Wert zurück. Jetzt hat die Lösung kein Problem mit der Strg-Taste.
document.addEventListener('mousewheel', function(e) {
if(e.deltaY % 1 !== 0) {
e.preventDefault();
}
});
Ich habe festgestellt, dass Chromium monitorEvents(document)
für dieses Ereignis mousewheel
verantwortlich ist. Ich weiß nicht, warum mousewheel
mit Pinch-Zoom ausgelöst wurde . Im nächsten Schritt finden Sie den Unterschied zwischen normalem Bildlauf und Pinch-Zoom.
Pinch-Zoom hat ein Attribut e.ctrlKey = true
und ein normales Bildlaufereignis hat e.ctrlKey = false
. Wenn Sie jedoch die Taste ctrl
gedrückt halten und eine Seite scrollen, ist e.ctrlKey
gleich true
.
Ich konnte keine bessere Lösung finden. :(
document.addEventListener('mousewheel', function(e) {
if(e.ctrlKey) {
e.preventDefault();
}
});
Es scheint sehr schwierig für den Desktop-Browser zu sein, den Zoom-Zoom zu verhindern.
Hier sind einige Ideen!
1) Durch Verwendung einiger Gesten wie hammer.js erkennen Sie das Pinch-Ereignis und versuchen es mit e.preventDefault zu verhindern
OR
2) Entwerfen Sie alles mit "%" in css oder verwenden Sie neuere Einheiten wie "vm" usw. (falls möglich). Auf diese Weise wird eine gerade Seite vergrößert, der Inhalt bleibt jedoch für jede Zoomstufe gleich.
Alles Gute!
Ich suchte so lange und hart nach einer einfachen Lösung für dieses Problem ohne Erfolg ... aber später entdeckte ich ein Plugin namens fullpage.js, das Pinz-Zoom verhindern konnte und trotzdem Gesten gestattete. Durch den Prozess der Beseitigung von js/css habe ich eine sehr einfache Lösung gefunden:
touch-action: none;
Das Hinzufügen zu meinem vollständigen Seitenelement verhinderte erfolgreich den Zoom-Zoom, erlaubte mir jedoch, Fabricjs-Objekte mit Quetschungen zu skalieren. Hurra!
var app = require('electron')
app.commandLine.appendSwitch('disable-pinch');
Lösung durch Mischen dieser beiden Links gefunden:
1 - https://github.com/electron/electron/issues/8793#issuecomment-289791853
2 - https://github.com/electron/electron/blob/master/docs/api/chrome-command-line-switches.md
meta-Tag hätte funktionieren sollen. Versuchen Sie es mit der Minimum-Skala = 1.0
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, user-scalable=no">
Und wenn es auch nicht funktioniert, fügen Sie sowohl die minimale als auch die maximale Skala hinzu
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
P.S. : Das Zoomen wird nur bei Mobiltelefonen deaktiviert.
Ich habe die einfachste Lösung dafür in der Datei index.html oder einer ähnlichen Datei für Ihr Projekt gefunden.
<script>
const electron = require('electron'); // Include electron
electron.webFrame.setZoomLevelLimits(1, 1); // Set min max zoom level as 1
const { ipcRenderer } = electron;
...
</script>
Dies funktioniert auf allen Geräten einwandfrei .. _ Der Viewport-Meta-Tag-Ansatz funktioniert auf Desktop-Computern nicht gut, nur das Problem auf mobilen Geräten wird behoben.
Gibt es einen Grund, warum Sie nicht verwenden können:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
Setzen Sie das in die Kopfzeile und es verhindert, dass Geräte zoomen.