滚动页面时如何防止地图平移


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();
  });
});

但是,除非先在地图中单击一次,释放鼠标按钮,然后平移,否则不会启用地图平移。是否可以实现博客文章中Google Maps所显示的无缝效果?

我试过mouse-dragmouse-drag-startmouse-down事件,但该行为是所有事件的相同。


1
您可以enableMapNavigation在重新调用该mouse-drag-start事件后立即尝试尝试。我发现dojotoolkit.org/reference-guide/1.10/dojo/Evented.html作为发出事件的dojo类。因此,您可以在地图上拖动(或单击)->启用地图导航->在同一函数中调用拖动事件(可能仅可以调用或可能需要参数)->进行业务拖动。它可能能够在鼠标上按下并拖动。可能只是尝试按不同顺序尝试这些事件的组合,等等
。–布兰科

Answers:


2

您永远不会给出使用dis / enableMapNavigation方法而不是使用dis / enableScrollWheelZoom方法的理由。使用后者。


不幸的是,这是行不通的,因为(1)使用滚轮时地图的默认行为是平移(而不是缩放),并且(2)map.disablePan();不适用于滚轮,仅适用于拖动到平移:jsfiddle.net/g7npfuvn/16
Stephen Lead

嗯,问题是我在Mac上进行了测试,并且smartNavigation生效了:正确时,对于使用触控板或魔术鼠标的Apple计算机,请滑动平移而不是缩放。如果将其设置为false,然后在PC上进行测试,则可以正常运行。因此,这似乎是Mac上ArcGIS Server JS API的限制。
斯蒂芬·

如果将值设置为false,则无论使用os +硬件如何,都应该会看到相同的行为。考虑侦听mousemove事件,并在检测到关闭时关闭smartNav,类似于此处所做的。
扎克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.