電子 アプリでピンチズームを無効にする方法はありますか?
ここで説明されているように、通常のjavascriptメソッドを使用してWebビュー内から動作させることはできません: https://stackoverflow.com/a/23510108/665261
_--disable-pinch
_フラグは electronではサポートされていない のようです。
以下を使用してさまざまな方法を試しました。
event.preventDefault()
on javascript _touchmove/mousemove
_イベントmeta viewport
_タグ-webkit-text-size-adjust
_一般的なウェブキット、または特に 電子 のいずれかの方法はありますか?
更新2:
使用する webFrame.setZoomLevelLimits (v0.31.1 +)inrender process( メインプロセスとレンダラープロセスの違い )。 Macのスマートズームはdocument.addEventListenerで引き続き機能するためです。
例require('electron').webFrame.setZoomLevelLimits(1, 1)
UPDATE:
ピンチズームのdeltaY
プロパティにはfloat
値がありますが、通常のスクロールイベントはint
値を返します。解決策はctrlキーで問題ありません。
デモ2.
_document.addEventListener('mousewheel', function(e) {
if(e.deltaY % 1 !== 0) {
e.preventDefault();
}
});
_
Chromium monitorEvents(document)
を使用して、このイベントmousewheel
の原因であることがわかりました。 mousewheel
がピンチズームでトリガーされる理由はわかりません。次のステップでは、通常のスクロールとピンチズームの違いを見つけます。
ピンチズームには_e.ctrlKey = true
_属性があり、通常のスクロールイベントには_e.ctrlKey = false
_があります。ただし、ctrl
キーを押しながらページをスクロールすると、_e.ctrlKey
_はtrue
と等しくなります。
より良い解決策を見つけることができませんでした。 :(
_document.addEventListener('mousewheel', function(e) {
if(e.ctrlKey) {
e.preventDefault();
}
});
_
デスクトップブラウザがピンチズームを防ぐことは非常に難しいようです。
ここにいくつかのアイデアがあります!
1) hammer.js などのジェスチャJavaScriptを使用して、ピンチイベントを検出し、e.preventDefaultを使用してそれを防止しようとします。
OR
2)cssで「%」を使用してすべてを設計するか、「vm」などの新しいユニットを使用します(可能な場合)。この方法では、ページもズームされますが、コンテンツはどのズームレベルでも同じままです。
ではごきげんよう!
私はこの問題の簡単な解決策を無駄に長く探しました...しかし、後でタッチジェスチャーを許可しながらピンチズームを防ぐことができるfullpage.jsというプラグインを発見しました。 js/cssを削除するプロセスを通じて、非常に簡単なソリューションを発見しました。
touch-action: none;
これをページ全体の要素に追加すると、ピンチズームは正常に防止されましたが、ピンチでfabricjsオブジェクトをスケーリングできました。やった!
var app = require('electron')
app.commandLine.appendSwitch('disable-pinch');
これらの2つのリンクを混在させることで解決策が見つかりました。
1- https://github.com/electron/electron/issues/8793#issuecomment-28979185
2- https://github.com/electron/electron/blob/master/docs/api/chrome-command-line-switches.md
メタタグは機能しているはずです。 minimum-scale = 1.0を使用してみてください
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, user-scalable=no">
うまくいかない場合は、最小スケールと最大スケールの両方を追加します
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
追伸:携帯電話でのみズームを無効にします。
このための最も簡単な修正は、スクリプトタグ内のプロジェクトのindex.htmlまたは同様のファイルで、電子を含めて、ズームレベルを以下のように構成します。
<script>
const electron = require('electron'); // Include electron
electron.webFrame.setZoomLevelLimits(1, 1); // Set min max zoom level as 1
const { ipcRenderer } = electron;
...
</script>
これは、デバイス間で問題なく機能します。ビューポートメタタグのアプローチはデスクトップではうまく機能せず、モバイルデバイスの問題を修正するだけです。
使用できない理由があります:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
それをヘッダーに入れると、デバイスがズームしなくなります。