リーフレットマウスホイールは、マップをクリックした後にのみズームします


19

私は働いているリーフレットのJavaScriptライブラリと私のHTMLドキュメントに(作業)の地図を添付します。ページの中央にあり、マウスホイールで下にスクロールして地図に到達すると、自動的に地図が拡大されます。

地図で止まることなくページをスクロールしたい。マップを最初にクリックした後にのみホイールズームを有効にする方法はありますか?

回答:


27

簡単です。scrollWheelZoom: falseオプションでL.Mapを作成し、リスナーを追加します。

map.once('focus', function() { map.scrollWheelZoom.enable(); });

ズームを切り替える必要がある場合:

map.on('click', function() {
  if (map.scrollWheelZoom.enabled()) {
    map.scrollWheelZoom.disable();
    }
    else {
    map.scrollWheelZoom.enable();
    }
  });

ありがとう:)私はこれについてコメントを始めましたが、あまりにも大きくなったので、以下の答えを入れてください。
ダンワイルド

13

受け入れられた回答のトグルコンポーネントに関するコメント/改善の詳細、素晴らしい(ありがとう)。だが。

マップを操作する場合、多くのユースケースでは、ユーザーはマップをクリックしてタスクを実行する必要があるため、次のようにします。

map.on('click', function() {
  if (map.scrollWheelZoom.enabled()) {
    map.scrollWheelZoom.disable();
    }
    else {
    map.scrollWheelZoom.enable();
    }
  });

ユーザーが実際にマップの使用を開始すると、予期しない動作が発生する場合があります。

ユーザーがマップを離れてクリックしてマウスのスクロールを無効にする方が、もう少し直感的に見えるかもしれません。

たとえばscrollWheelZoom: false、上記のように設定すると、次のようになります。

map.on('focus', function() { map.scrollWheelZoom.enable(); });
map.on('blur', function() { map.scrollWheelZoom.disable(); });

1
focus/ を使用blurすると、マップ機能がより直感的になります。
ダブルシャープ

同意した。フォーカス/ぼかしのアプローチは素晴らしいです。ありがとう!
ストリンガー

すばらしいですが、マップが全画面表示で、ユーザーがすばやく連続してスクロールする場合(1秒以内にいくつかの方向を変更する場合)、スクロールを無効にする手段が必要です。この混乱した上下スクロールは、それらがスタックしており、フルブラウザマップを離れてその上下のコンテンツにアクセスできない場合に発生します。
ローレン

6

Leaflet.Sleepはあなたの仕事を簡単にします、そしてそれは十分に設定可能です

基本的に、スクロールイベントが不要な場合はオフにし、必要な場合はマップを「ウェイク」します。

コードを投稿しますが、デフォルトでは正しく設定されているように見えるので、おそらくそれ以上のものは必要なく<script src="path/to/leaflet-sleep.js"></script>このようなマップがあります。


0

あなたはそれらの3行だけでそれを行うことができます:

map.scrollWheelZoom.disable();
map.on('focus', () => { map.scrollWheelZoom.enable(); });
map.on('blur', () => { map.scrollWheelZoom.disable(); });

または:

map.scrollWheelZoom.disable();
this.map.on('click', () => { this.map.scrollWheelZoom.enable();});
this.map.on('mouseout', () => { this.map.scrollWheelZoom.disable();});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.