ページをスクロールするときにマップがパンしないようにする方法


10

HTMLページにマップが含まれていて、ユーザーがマウスホイールを使用してページを下にスクロールした場合、ユーザーのマウスがマップ上を通過すると、ページはスクロールを停止し、マップ自体はパンします。Demo1を参照してください。

ArcGIS Server JS API 3.xを使用したGoogleマップの簡単な操作性のトリックで詳しく説明されている動作をエミュレートしたいと思います。

つまり、ユーザーが明示的に地図内をドラッグしない限り、ページはスクロールする必要あります。その場合、地図はパンする必要があります。

動作はDemo2にほぼあります。マウスがマップ上にある場合でもページがスクロールします。

map.on("load", function(){
  // Disable navigation by default, so scrolling the page doesn't scroll the map
  map.disableMapNavigation();

  // When the user tries to pan the map, allow this
  map.on('mouse-drag-start', function(){
    map.enableMapNavigation();
  });

  // Restore the no-scroll behaviour when the mouse leaves the map
  map.on('mouse-out', function(){
    map.disableMapNavigation();
  });
});

ただし、最初にマップ内で1回クリックし、マウスボタンを離してからパンしない限り、マップのパンは有効になりません。ブログの投稿でGoogleマップに示されているシームレスな効果を実現することは可能ですか?

私が試したmouse-dragmouse-drag-startmouse-downイベントが、動作はすべてのイベントで同じです。


1
イベントenableMapNavigationを再度呼び出した直後に試すことができますmouse-drag-start。私はdojotoolkit.org/reference-guide/1.10/dojo/Evented.htmlを、イベントを発生させるdojoクラスとして見つけました。したがって、マップ上でドラッグ(またはクリック)します->マップナビゲーションを有効にします->同じ関数でドラッグイベントを呼び出します(単に呼び出すことができるか、パラメータを必要とする場合があります)->ビジネスのドラッグに取り掛かります。マウスを下に持ち上げてドラッグできる場合があります。これらのイベントをさまざまな順序で試すコンボのようなものになるかもしれません
ブランコ

回答:


2

あなたは使用するための理由を与えることはありませんDIS / enableMapNavigationが方法ではなく、DIS / enableScrollWheelZoomの方法を。後者を使用します。


残念ながら、これは機能しません。(1)スクロールホイールが使用されている場合、マップのデフォルトの動作はパン(ズームでmap.disablePan();はなく)であり、(2)スクロールホイールには適用されず、ドラッグしてパンするだけです。jsfiddle.net/g7npfuvn/16
スティーブンリード

ああ、問題は私がMacでテストしていて、smartNavigation効果があるところです。trueの場合、トラックパッドまたはマジックマウスを使用するAppleコンピューターでは、ズームではなくパンをスワイプします。これをfalseに設定してPCでテストすると、動作します。これは、MacでのArcGIS Server JS APIの制限のようです。
スティーブンリード

値をfalseに設定すると、os + hardwareに関係なく同じ動作が発生するはずです。mousemoveイベントをリッスンし、検出時にsmartNavをオフにすることを検討してください。これは、ここで行われたものと同様です
Zack
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.